TZOJ 6948: 走迷宫/深搜模板
描述
有一个迷宫,图案如图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中 } } }
分类:
深搜
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现