No.3ベストアンサー
- 回答日時:
プログラムの一例
経路が1つしかない場合は、とりあえずこれでうまくいくと思う。
見つかった経路は、ゴールからスタートに表示されます。
//-------------------------------------------------------------
//2が壁0が道3がスタート4がゴールの配列で迷路を解く
#include <stdio.h>
#define SIZE 7
#define ROAD 0
#define WALL 2
#define START 3
#define GOAL 4
int Map[SIZE][SIZE]={
{WALL ,WALL ,WALL ,WALL ,WALL ,WALL ,WALL },
{WALL ,START,ROAD ,ROAD ,ROAD ,ROAD ,WALL },
{WALL ,WALL ,ROAD ,WALL ,WALL ,ROAD ,WALL },
{WALL ,ROAD ,ROAD ,ROAD ,ROAD ,WALL ,WALL },
{WALL ,ROAD ,WALL ,ROAD ,WALL ,ROAD ,WALL },
{WALL ,WALL ,ROAD ,ROAD ,ROAD ,GOAL ,WALL },
{WALL ,WALL ,WALL ,WALL ,WALL ,WALL ,WALL }};
typedef struct position {
int x;
int y;
} POSITION;
POSITION dir[4]={
{0 ,-1}, //上
{0 , 1}, //下
{-1, 0}, //左
{ 1, 0}};//右
#define FIND 1
#define NOTFIND 0
int check(POSITION base, POSITION diff, POSITION old){
//ベースの位置を基準に探せと指示された場所がゴールでない場合北方向以外の4方向を調べる
POSITION wk;
wk.x=base.x+diff.x;
wk.y=base.y+diff.y;
if(wk.x==old.x && wk.y==old.y){
return NOTFIND;//既に来た所を探してもムダ
}
if(Map[wk.y][wk.x]==GOAL){
printf("GOAL(%d,%d)",wk.x, wk.y);
return FIND;
}
if(Map[wk.y][wk.x]==ROAD){
int i;
for(i=0;i<4;i++){
if(FIND==check(wk, dir[i], base)){
printf("(%d,%d)",wk.x, wk.y);
return FIND;
}
}
}
return NOTFIND;
}
int main(void){
POSITION start;
int i,j;
for(i=0;i<SIZE;i++){
for(j=0;j<SIZE;j++){
if(Map[i][j]==3){
start.x=j;
start.y=i;
goto start_find;
}
}
}
printf("開始位置が設定されていません");
return -1;
start_find:
for(i=0;i<4;i++){
if(FIND==check(start, dir[i], start)){
printf("(%d,%d)START\n",start.x,start.y);
return FIND;
}
}
printf("経路が見つかりません");
return NOTFIND;
}
No.2
- 回答日時:
では、1歩だけ進むプログラム(関数)をまず目標にしてみましょう。
現在の位置(座標)を引数で受け取り、
・現在の位置(座標)
・進むことのできる位置(座標)
を表示する関数を作ってみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- 小学校 迷路を解いてください!! この問題どうしても、うまく出来なくてクリア出来る方よろしくお願い申し上げま 1 2022/09/25 12:46
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- 工学 1つのタクトスイッチで複数の並列回路を閉じ、アースにつなげることができるスイッチはありますか。 2 2022/08/06 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
再起呼び出しの回数をカウント...
-
C言語で%を使わない余りの出し方
-
迷路を脱出する経路探索プログ...
-
画像の拡大・縮小
-
分数の足し算をさせるプログラ...
-
C言語で簡単なパックマンゲーム...
-
C++で表を作成したいのです ...
-
条件が多い場合
-
複数の共有メモリの作成
-
ヒストグラム均等化処理プログラム
-
3のつく数と3の倍数を表示 C言語
-
argvのNULLチェック
-
乱数で交互に偶数、奇数が、、、。
-
プログラミングに関して
-
OpenCVによる4値化について
-
再帰処理をループ処理に変換
-
16bitで乱数を生成する方法
-
C++ Debug Errorについて教えて
おすすめ情報