描述
有一个迷宫,图案如图5.2.6所示,红色区域表示不能通行,蓝色区域表示能通行,在迷宫中通行的方向是上下左右四个方向。
从入口(1,1)位置进入迷宫,编程判断能否从出口位置成功走出。
迷宫图案中的通行区域用数字表示:1是可以通行的点,0是不能通行的点。
输入
输入为一10*10的01图像。
输出
如果能走出请输出"successful!",否则输出"fail!"。
样例输入
0000000000
0110111010
0110111010
0111100110
0100011110
0111011110
0101110110
0100010010
0011111110
0000000000
样例输出
successful!#include<bits/stdc++.h> using namespace std; //nex在原位置的基础上行列坐标的变换需要增减的量 int nex[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; //方向数组右、下、左、上 行列坐标 char a[15][15]; //地图 \0 int vis[15][15]; //标记数组 0 int f; //f一般作为是否到达终点的标记 0 void dfs(int x,int y); //声明一个返回空类型的函数dfs int main() { //1.输入地图 for(int i=1;i<=10;i++) //行数是1-10,最小行数1 for(int j=1;j<=10;j++) // 最小点位是(1,1),最大点位是(10,10) { cin>>a[i][j]; //输入第i行的第j个点 } //2.dfs()开搜 dfs(2,2); //将起点(1,1)传入 //3.判断f if(f==1) cout<<"successful!"; else cout<<"fail!"; return 0; } void dfs(int x,int y) { if(f==1)return; //如果f已经为1证明已经寻找到了终点,直接返回程序 if(x==9&&y==9) { f = 1; //f=1证明找到结果 return; //结束dfs程序 } for(int i=0;i<4;i++) //循环方向数组vis { int tx = x + nex[i][0]; //下一步的行坐标tx int ty = y + nex[i][1]; //下一步的列坐标ty if(tx<1||tx>10||ty<1||ty>10)continue; //最小点位是(1,1),最大点位是(10,10) if(a[tx][ty]=='1' && vis[tx][ty]==0)//在地图上可行且没有走过/标记过的点 { vis[tx][ty] = 1; //标记(tx,ty)走过 dfs(tx,ty); //递归将下一步(tx,ty)作为起点传入dfs中 } } }
标签:10,tx,ty,int,迷宫,dfs,6948,TZOJ,模板 From: https://www.cnblogs.com/jyssh/p/16757097.html