Luogu p1605 迷宫

该博客介绍了Luogu P1605迷宫问题的解决方法,强调这是一道普及级别的竞赛算法题目。通过简单的搜索暴力策略,递归地进行四方向探索。在实现过程中,需特别注意障碍物位置,特别是当障碍位于终点时,需要预先判断避免无效操作。博主分享了相关代码实现。

这里写图片描述
这是道普及-的题目
很简单哦
用搜索暴力就行拉!!!

需要注意的是:

上下左右都可以走,所以要递归调用自己四次
如果障碍是在终点处的话,肯定不能走,需要先判断一下!!!
下面放上我的代码:

#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;//回溯
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值