迷宫寻找路径数

题目背景

给定一个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 }
复制代码

 

posted @   Xxaj5  阅读(429)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示