迷路3

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!~%")))

デカい迷路を試してみました。迷路を自分で作るのは気が遠くなる話なので、どっかから迷路を取ってこようとしました。ゲームのダンジョンのデータとかを置換すればいけると考えたんですが、その前に下のサイトを発見。

No001 迷路作成プログラムの製作

ここのプログラムで、99 x 99の迷路を作って入力に使いました。


出力結果はすごいことになりました。上の画像です。たぶんつぶれて訳わかんないと思いますが。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください