#include <iostream>
#define M 4
#define N 4
/*
走迷宫 显示经过的节点
待改善:输出最短路径
*/
using namespace std;
bool visit[M][N];
int map[M][N];
int inx;
int iny;
int outx;
int outy;
int best=N*M;
int way[2][8]={-1,-1,-1,0,0,1,1,1,-1,0,1,-1,1,-1,0,1};
bool isInMap(int x,int y)
{
if(x>=0&&x<M&&y>=0&&y<N)
{
return true;
}
return false;
}
void DFS(int x,int y,int sum)
{
if(!isInMap(x,y)||sum>best)
return;
else{
sum++;
if(x==outx&&y==outy&&sum<best)
best=sum;
visit[x][y]=true;
cout<<x<<y<<endl;
for(int i=0;i<8;i++)
{
if(isInMap(x+way[0][i],y+way[1][i]))
{
if(map[x+way[0][i]][y+way[1][i]]==0&&visit[x+way[0][i]][y+way[1][i]]==false)
{
DFS(x+way[0][i],y+way[1][i],sum);
}
}
}
}
}
int main()
{
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
visit[i][j]=false;
cin>>map[i][j];
}
}
cin>>inx>>iny>>outx>>outy;
if(isInMap(inx,iny)&&isInMap(outx,outy))
{
DFS(inx,iny,0);
}
cout<<best;
return 0;
}
迷宫求解DFS
最新推荐文章于 2024-03-22 10:47:52 发布