迷路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の迷路を作って入力に使いました。
出力結果はすごいことになりました。上の画像です。たぶんつぶれて訳わかんないと思いますが。