这是道普及-的题目
很简单哦
用搜索暴力就行拉!!!
需要注意的是:
上下左右都可以走,所以要递归调用自己四次
如果障碍是在终点处的话,肯定不能走,需要先判断一下!!!
下面放上我的代码:
#include<iostream>
using namespace std;
int ans;
int h[1001][1001] = { 0 }, n, m, t,begx,begy,enx,eny;
inline void dfs(int, int);
int main() {
int i, j;
int x, y;
cin >> n >> m;//输入行数列数
cin >> t;//输入障碍数
cin >> begx >> begy >> enx >> eny;//输入起点终点
for (i = 1; i <= t; i++) {//输入障碍位置
cin >> x >> y;
h[x][y] = 1;
}
dfs(begx, begy);//调用函数,不过是从begx和begy开始,因为是起点啊
if (h[enx][eny] == 1) ans = 0;//去除掉结尾是障碍的情况
cout << ans << endl;
return 0;
}
inline void dfs(int x, int y) {
int i, j;
if (x<1 || y<1 || x>n || y>m) return;//边界判断情况
if (x == enx&&y == eny) {//如果到目的地了,ans++
ans++;
return;
}
if (h[x][y] == 0) {//上下左右调用
h[x][y] = 1;//设置为已经走过,不能再走,否则就可能会陷入死循环哦
dfs(x, y + 1);
dfs(x + 1, y);
dfs(x - 1, y);
dfs(x, y`
- 1);
h[x][y] = 0;//回溯
}
}
该博客介绍了Luogu P1605迷宫问题的解决方法,强调这是一道普及级别的竞赛算法题目。通过简单的搜索暴力策略,递归地进行四方向探索。在实现过程中,需特别注意障碍物位置,特别是当障碍位于终点时,需要预先判断避免无效操作。博主分享了相关代码实现。
1万+

被折叠的 条评论
为什么被折叠?



