私は、迷路を効果的に解決する方法に答えた多くの記事と質問を参照しましたが、ここで私のコードで何がうまくいかないかを確認したいと思います。迷路を考慮する:2次元配列の迷路を解決する
2 1 0 0 3
0 1 0 1 1
0 1 0 0 1
0 1 1 0 0
0 0 0 0 0
1さんの壁を表し、0のパスを表す(ソース3 2と宛先です)。 パスがあるかどうかを出力する必要があります。
int y=0;
while(y==0)
{
robo1(n,m,maze);//this function adds 2 to any '0'/'3' in (i,j+1),(i+1,j),(i-1,j),(i,j-1) (if exists),where (i,j) is 2
robo2(n,m,k2,maze);//this function adds 3 to any '0'/'2' in (i,j+1),(i+1,j),(i-1,j),(i,j-1) (if exists), where (i,j) is 3
if(find5(n,m,maze)==1)//this function returns 1 if there is '5' in the maze
y++;
if(find0(n,m,maze)==0)//this function returns 0 if there are no '0' in the maze
break;
}
if(find0(n,m,maze)==0 && y==0)
printf("-1\n");//no path
else
printf("1\n");//there is a path
私の考えでは、ループの任意の数の後に5が迷路で発見された場合、それはパスがある意味するであろうということです。 しかし、この関数をコードで実装すると、私は間違った答えを得たり、時にはランタイムエラーが発生します。 上記のロジックに欠陥がありますか?
'robo1'、 'robo2'、' find5'、 'find0'の実装を提供してください。ランタイムエラーは、これらの関数のいずれかで範囲外に出る可能性があることを意味しますが、コードを書くことは難しいです。 – buld0zzr
私には、そのアプローチが何であるかは不明です。あなたは[深さの最初の検索](https://en.wikipedia.org/wiki/Depth-first_search)を知っていますか? – Codor
この問題はおそらく 'robo *'と 'find *'にありますので、@ buld0zzrと言ってください。ここでのロジックは基本的にはブルートフォース双方向BFS – shole