34分
現役のときに比べて腕が鈍ってるなあ
ソースは汚いよ
同じところを二回訪れないことに注意して、次の状態をキューに入れていけばいいだけ
隣は距離1なのでただのFIFOでいい
重み付きのグラフならpriority queueを使う
dequeなんちゃらの前までが入力で、while の中が重要なコード
答えはSとGも塗り潰しちゃったのを出力してる
サンプルの入力で最短距離であることを確認してる
#include <map> #include <string> #include <iostream> #include <vector> #include <iterator> #include <deque> #include <set> using namespace std; typedef pair<int, int> P; int dir_x[] = {0,1, -1, 0}; int dir_y[] = {1, 0, 0, -1}; int main() { string line; vector<string> input; while (getline(cin, line)) { input.push_back(line); } const int X = input.size(); const int Y = input.begin()->size(); vector<P> start; P goal; for (int i = 0; i < X; i++) { for (int j = 0; j < Y; j++) { if (input[i][j] == 'S') { start.push_back(P(i, j)); } else if (input[i][j] == 'G') { goal = P(i, j); } } } deque<vector<P> > Q; set<P> visited; Q.push_back(start); while (!Q.empty()) { vector<P> p = Q.front(); Q.pop_front(); if (visited.find(p.back()) != visited.end()) { continue; } visited.insert(p.back()); if (p.back() == goal) { for (int i = 0; i < p.size(); i++) { input[p[i].first][p[i].second] = '$'; } copy(input.begin(), input.end(), ostream_iterator<string>(cout, "\n")); break; } for (int i = 0; i < 4; i++) { P next = P(p.back().first + dir_x[i], p.back().second + dir_y[i]); if (input[next.first][next.second] == '*') { continue; } vector<P> new_state(p.begin(), p.end()); new_state.push_back(next); Q.push_back(new_state); } } return 0; }
少し遅れた感があるけど、解いてみた。 出力がテキストでないけど・・・。 仕事の合間を使ってやったものの、昼前に始めたのが5時頃にようやくできる程度。 これを25分とは尋常じゃ...
コンピュータサイエンスの教育を受けた人や、ACM/ICPCとかtop coderとかやってる人なら、このての問題はすぐ解けるよ 解けない(問題を知らない、解きかたを知らない)と、はずかしいレ...
増田のelegantな解答を拝見したい
34分 現役のときに比べて腕が鈍ってるなあ ソースは汚いよ 同じところを二回訪れないことに注意して、次の状態をキューに入れていけばいいだけ 隣は距離1なのでただのFIFOでいい 重み...
ワープあり迷宮とかだったらもっと楽しかったのにw
単純にグラフ作ってdijkstraで解けるような拡張だとつまらない 入力のサイズが大きすぎて、普通の解法が通用しなくて、計算量を減らす必要があるとかだと楽しい 例えば、このタイプの...
こういう話題を見てると、俺ってつくづくプログラミングそのものには興味が無いなーって思う。 色々小細工してリソースを効率的に使うとか全く興味が無い。どうでもいいから適当に...
リソース減らすってのは、技術というより、現実優先なんだよね。 プロダクトを実際に作ると、どうしても、複数のプログラムが一緒に動いていたり、 メモリ減らすとチップを1つ下の...
そういえば、昔、巨大なデーターを扱うプログラムで 遅いというクレームがついて みんなで、早くしましょう。 増田さんの担当分は3時間未満になるようにしてください。って言われ...
その時点ですでに俺のパートは1時間前後だったわけだが。 なら、納期ギリギリまでボケッと遊ぶなり別の勉強するなりして自分の担当分には手を加えず、提出する時に「なんとかが...
全体の処理時間が短くなってねーから、バレるどころかw また、あらぬことをイワレルノデツヨ
まずは、巨大な迷路を書くプログラムからだな。 学生時代だったらアルゴリズムを覚えていたので数十分だが いまだと数時間はかかりそう。 とりあえず、巨大な迷路データーが無いこ...
数字を全角で書いている時点で
そうは言っても、やっぱりあいつは偉そうだけどね。 こんなプログラムできなくても仕事にはなんの問題もないよ。
これで40分。 タイムアタックってことでアルゴリズムは全幅探索で書き上げました。 エラーチェック皆無。 A*ならもう5分ほど延びるかな? using System;using System.Collections.Generic;using System.L...
[増田@hatelabo.jp]gmcs test.cs -r:System.Xml.Linq -out:test.exe test.cs(108,12): warning CS0660: `Maze.Position' defines operator == or operator != but does not override Object.Equals(object o) test.cs(108,12): warning CS0661: `Maze.Position' define...
なんか、経路問題だけあって、できてる人のほうが多い印象だよね。 所詮プログラムなんだから、普通にだれでもできるよねぇ。 所詮やっぱり、プログラマはブルーワーカーか アルゴ...