迷路攻略プログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
maliopop
記事: 3
登録日時: 5年前

迷路攻略プログラム

#1

投稿記事 by maliopop » 5年前

左手法でクリアできるはずなのですが同じ場所でずっとくるくる回っているだけで前に進めません。

予想だとスタートから一歩前に進んでからこのif文を動かせばいいのかなと思うんですけどやり方がわかりません。
違う方法があるならば教えて下さるとありがたいです。

自分が書いた左手法のプログラムです。
なにか見たい部分があれば言っていただけると幸いです。

コード:

 
 //壁の状況を取得する
	wall = getWall();

	if (!(wall & D_WALL_LEFT)) { 		//左に壁がない
		leftTurn();
	}
	else if (!(wall & D_WALL_FRONT)) {	//前に壁がない
		straight();
	}
	else if (!(wall & D_WALL_RIGHT)) {	//右に壁がない
		rightTurn();
		
	}
	else {						//後ろに下がる
		back();
	}
 

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 迷路攻略プログラム

#2

投稿記事 by みけCAT » 5年前

まず、変な「予想」をするのは避け、「左手法」とはどのようなアルゴリズムなのかを調べましょう。
例えば迷路 第四章を参考にすると、以下のようなプログラムになると思います。

コード:

	//壁の状況を取得する
	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マス進む
参照先のサイトでは壁も道も同じ大きさのマスで表現された迷路を扱っているので「2コマ進む」となっていますが、
以下のような壁が薄い迷路であれば「1マス進む」でいいはずです。
meiro.png
迷路の例
meiro.png (828 バイト) 閲覧数: 1779 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る