Description
定义一个二维数组:
int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
Sample Output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
代码:
#include<iostream>
#include<queue>
#include<stack>
using namespace std;
struct node{
int x,y,step;
node(){
}
node(int xx,int yy,int sstep):x(xx),y(yy),step(sstep){
}
};
struct prin{
int x,y;
}oo[1009][1009];
int book[1009][1009];
const int rr[4][2]={1,0,0,1,-1,0,0,-1};
void prin(int xx,int yy)
{
if(xx == 1 && yy == 1)
{
}
else{
prin(oo[xx][yy].x,oo[xx][yy].y);
printf("%d,%d\n",oo[xx][yy].x,oo[xx][yy].y);
}
};
int a[6][6] = {
0,0, 0, 0, 0, 0,
0,0, 1, 0, 0, 0,
0,0, 1, 0, 1, 0,
0,0, 0, 0, 0, 0,
0,0, 1, 1, 1, 0,
0,0, 0, 0, 1, 0,
};
int tt =1;
void dfs(int x,int y,int step)
{
queue<node>A;
A.push(node(x,y,step));
book[x][y] = 1;
oo[x][y].x = x;
oo[x][y].y = y;
while(!A.empty())
{
node u =A.front();
A.pop();
if(u.x == 5 && u.y == 5)
{
prin(u.x,u.y);
return ;
}
for(int i=0;i<4;++i)
{
int xx = u.x+rr[i][0];
int yy = u.y+rr[i][1];
int ss = u.step+1;
if(xx <= 5 && yy <= 5 && a[xx][yy] == 0 && book[xx][yy] == 0&&xx>0&&yy>0)
{
oo[xx][yy].x = u.x;
oo[xx][yy].y = u.y;
A.push(node(xx,yy,ss));
book[xx][yy] = 1;
}
}
}
return ;
}
int main()
{
for(int i=1;i<=5;++i)
{
for(int j=1;j<=5;++j)
{
printf("%d,",a[i][j]);
}
printf("\n");
}
// printf("0/0\n");
dfs(1,1,0);
printf("5/5\n");
return 0;
}
/*
01010101
00101010
10001010
00010101
01000101
01000001
01011101
00010000
*/