走迷宫(同一):最短路径

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=58

有关深搜广搜知识的讲解PPT链接:(一)http://wenku.baidu.com/link?url=uuVluDfJP-gW6FiV0F8J4s4VuEOU__uqW1nFjuOO-id9ntGdqXLLvwDN0eR3akZMKP_iBmA0xPGAE-SOwdWyN21HJoXrHbd7cvSx2zRkZBa

(二)http://wenku.baidu.com/view/67228040580216fc710afd1b.html?from=search

//走迷宫(一)
//前提:迷宫图已知。给你一个起点和终点
//问题:至少几步到达终点
//问题隐含条件:1、肯定走得到终点;2,、求最短路径的问题(可以用队列+BFS)


#include<iostream>
using namespace std;

#define min(a,b) a<b?a:b

int Map[9][9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 0, 1, 0, 0, 1, 0, 1,
1, 0, 0, 1, 1, 0, 0, 0, 1,
1, 0, 1, 0, 1, 1, 0, 1, 1,
1, 0, 0, 0, 0, 1, 0, 0, 1,
1, 1, 0, 1, 0, 1, 0, 0, 1,
1, 1, 0, 1, 0, 1, 0, 0, 1,
1, 1, 0, 1, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1 };

int a, b, c, d, num;

int dfs(int x, int y, int dep)   //dep代表当前DFS的深度
{
    if (Map[x][y])   //if(走不下去了)
    {
        return 1;
    }
    if (x == c&&y == d)  //if(找到解了)
    {
        num = min(dep, num);
        return 0;
    }

    //枚举下一种情况,DFS(...,dep+1)
    Map[x][y] = 1;
    dfs(x - 1, y, dep+1);
    dfs(x + 1, y, dep + 1);
    dfs(x, y - 1, dep + 1);
    dfs(x, y + 1, dep + 1);
    Map[x][y] = 0;

}

int main()
{
    int n;
    cin >> n;
    while (n--)
    {
        num = 10000;
        cin >> a >> b>>c>>d;
        dfs(a,b,0);
        cout << num << endl;
    }
}

相关链接:http://www.cnblogs.com/zhengbin/p/4495358.html

转载于:https://www.cnblogs.com/Strugglinggirl/p/6112084.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值