迷路3
2007/06/16
ibazaさんの回答 id:ibaza:20070615:1181915322
ibazaさんの回答を見て、スタート地点とゴール地点探さないとダメなことに気付きましたorz.
スタートとゴールを決め打ちじゃ、サイズを指定してる意味ないですよね。
;スタート地点を求めるFunction(defun start-point (m)(let ((i 0))(loop(if (zerop (aref (maze-data m) 0 i))(return (make-point :x i :y 0)))(incf i))));ゴール地点を求めるFunction(defun goal-point (m)(let ((i 0))(loop(if (zerop (aref (maze-data m) (1- (maze-size m)) i))(return (make-point :x i :y (1- (maze-size m)))))(incf i))));問題 d. ファイル名を引数にとり、迷路を解いて表示する。(defun solv-maze (file)(let ((m (load-maze file)))(output-answer m(get-routes `(,(start-point m)) m (goal-point m) nil))(format t "Solved!~%")))
デカい迷路を試してみました。迷路を自分で作るのは気が遠くなる話なので、どっかから迷路を取ってこようとしました。ゲームのダンジョンのデータとかを置換すればいけると考えたんですが、その前に下のサイトを発見。
ここのプログラムで、99 x 99の迷路を作って入力に使いました。
出力結果はすごいことになりました。上の画像です。たぶんつぶれて訳わかんないと思いますが。