迷宫问题
定义一个二维数组:
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 0Sample Output
(0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4)
1 #include<iostream> 2 #include<stack> 3 using namespace std; 4 int maze[5][5]; 5 int vis[5][5]; 6 int dx[]={0,-1,1,0}; 7 int dy[]={1,0,0,-1}; 8 struct node{ 9 int x,y; 10 //int step; 11 }; 12 int flag; 13 node ans[5000]; 14 void DFS(int x,int y,int step) 15 { 16 if(x==4&&y==4&&!flag) 17 { 18 flag=1; 19 ans[step].x=x; 20 ans[step].y=y; 21 for(int i=0;i<=step;i++) 22 cout<<"("<<ans[i].x<<", "<<ans[i].y<<")"<<'\n'; 23 } 24 else if(!flag) 25 { 26 for(int i=0; i<4; i++) 27 { 28 int sx=x+dx[i]; 29 int sy=y+dy[i]; 30 if(sx>=0&&sx<5&&sy>=0&&sy<5&&!vis[sx][sy]&&maze[sx][sy]==0) 31 { 32 ans[step].x=x; 33 ans[step].y=y; 34 vis[x][y]=1; 35 DFS(sx,sy,step+1);//前缀的++后缀++都不对 36 vis[x][y]=0; 37 } 38 } 39 } 40 } 41 int main() 42 { 43 for(int i=0;i<5;i++) 44 { 45 for(int j=0;j<5;j++) 46 cin>>maze[i][j]; 47 } 48 DFS(0,0,0);//从零开始 49 }

浙公网安备 33010602011771号