左手法でクリアできるはずなのですが同じ場所でずっとくるくる回っているだけで前に進めません。
予想だとスタートから一歩前に進んでからこのif文を動かせばいいのかなと思うんですけどやり方がわかりません。
違う方法があるならば教えて下さるとありがたいです。
自分が書いた左手法のプログラムです。
なにか見たい部分があれば言っていただけると幸いです。
迷路攻略プログラム
Re: 迷路攻略プログラム
まず、変な「予想」をするのは避け、「左手法」とはどのようなアルゴリズムなのかを調べましょう。
例えば迷路 第四章を参考にすると、以下のようなプログラムになると思います。
参照先のサイトでは壁も道も同じ大きさのマスで表現された迷路を扱っているので「2コマ進む」となっていますが、
以下のような壁が薄い迷路であれば「1マス進む」でいいはずです。
例えば迷路 第四章を参考にすると、以下のようなプログラムになると思います。
//壁の状況を取得する
wall = getWall();
if (!(wall & D_WALL_LEFT)) { //左に壁がない (左に進める)
leftTurn(); // 左に向きを変える
}
else if (!(wall & D_WALL_FRONT)) { //前に壁がない (前に進める)
// そのまま
}
else if (!(wall & D_WALL_RIGHT)) { //右に壁がない (右に進める)
rightTurn(); // 右に向きを変える
}
else { //後に向きを変える
leftTurn();
leftTurn();
}
straight(); // 前に1マス進む
以下のような壁が薄い迷路であれば「1マス進む」でいいはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)