迷宫寻找路径数
题目背景
给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。
输入格式
第一行
输入n行m列 障碍个数numObs
第二行
起始点xbegin ybegin 终止点xend yend
接下来numObs行
每行输入障碍的坐标
输出格式
路径条数
输入:
2 2 1
1 1 2 2
1 2
输出
1
思路:采用bfs,四个方向,找到一个可以走的点就把当前点作为起点就进入递归,然后把当前点的四个方向遍历,然后再递归,一直到找到终点返回到上一个状态再寻找另一个方向,找完后再返回,知道上一个状态的点的方向都找完之后再返回一个状态继续,返回状态的同时记得要把标记走过的路再还原。
1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 5 using namespace std; 6 7 bool temp[7][7];//标记是否走过 8 int maze[7][7]; 9 int dx[] = {0, 0, 1, -1}; 10 int dy[] = {-1, 1, 0, 0}; 11 int n, m, xbegin, ybegin, xend, yend, xObs, yObs, res = 0, numObs; 12 13 void bfs(int x, int y) 14 { 15 if(x == xend && y == yend) 16 { 17 res++; 18 return; 19 } 20 else 21 { 22 for(int i = 0; i < 4; i++) 23 { 24 if(temp[x+dx[i]][y+dy[i]] == 0 && maze[x+dx[i]][y+dy[i]] == 1) 25 { 26 temp[x][y] = 1; 27 bfs(x+dx[i], y+dy[i]); 28 temp[x][y] = 0; //还原 29 } 30 } 31 } 32 } 33 34 int main() 35 { 36 cin >> n >> m >> numObs; 37 for(int i = 1; i <= n; i++) 38 { 39 for(int j = 1; j <= m; j++) 40 { 41 maze[i][j] = 1; 42 } 43 } 44 cin >> xbegin >> ybegin >> xend >> yend; 45 for(int i = 0; i < numObs; i++) 46 { 47 cin >> xObs >> yObs; 48 maze[xObs][yObs] = 0; 49 } 50 bfs(xbegin, ybegin); 51 cout << res << endl; 52 system("pause"); 53 return 0; 54 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!