如何用深度搜索出需要的那条路?c++

问题描述

如何用深度搜索出需要的那条路?c++

n m t
3 4 7
S.X.
..X.
...D
n等于行,m等于列,t为步数,S为起始位置,要在刚好t步到达D。

 #include <iostream>
#include <cstring>
using namespace std;
int n,m,t,sum,flag=0;
int x2,y2;
char a[10][10];
int b[10][10];
int xy[][2]={{1,0},{0,1},{-1,0},{0,-1}};
void dfs(int i,int j)
{
    int tx,ty,k;
    b[i][j]=1;
    for (k=0;k<4;++k)
    {
        tx=i+xy[k][0] ;
        ty=j+xy[k][1] ;
        if(tx>=0&&tx<n&&ty>=0&&ty<m&&a[tx][ty]!='X'&&b[tx][ty]==0)
        {
            sum++;
            if (sum==t&&x2==tx&&y2==ty)//找到所用步数相等且刚好在‘D’点那里
            {
                flag=1;
                return;
            }
            dfs(tx,ty);
            b[tx][ty]=0 ;//不符合就回溯(不知道有没有用错)
            sum--;
        }
    }
}
int main()
{
    int i,j,x1,y1;
    while(cin >> n >> m >> t)
    {
        sum=0;
        flag=0;
        memset(b,0,sizeof(b));
        for(i=0;i<n;++i)
        {
            cin >> a[i] ;
        }
        for(i=0;i<n;++i)
        {
            for (j=0;j<m;++j)
            {
                if (a[i][j]=='S')
                {
                    x1=i;
                    y1=j;
                }
                else if (a[i][j]=='D')
                {
                    x2=i;
                    y2=j;
                }
            }
        }
        dfs(x1,y1);
        cout << "sum: " << sum << " flag: " << flag << endl;
        for(i=0;i<n;++i)//看一下标记的路径
        {
            for(j=0;j<m;++j)
            {
                cout << b[i][j] << " " ;
            }
            cout << endl;
        }
        if (flag==1&&sum==t)
        {
            cout << "Yes" << endl;
        }
        else
        {
            cout << "No" << endl;
        }
    }
    return 0;
}

怎样才能实现啊?

时间: 2024-12-02 12:06:37

如何用深度搜索出需要的那条路?c++的相关文章

【百度地图API】如何用圆形搜索获取中心点周围100米内全部关键点?如天安门附近所有的餐厅、加油站、宾馆、大厦等

原文:[百度地图API]如何用圆形搜索获取中心点周围100米内全部关键点?如天安门附近所有的餐厅.加油站.宾馆.大厦等 摘要: 在LBS上有这样一个常用的功能,查找附近所有的关键点(POI点,比如标志性建筑物,餐厅,大厦,加油站等).相信大家对search已经非常熟悉了,可是search必须要传"关键字"参数,即使是多关键字搜索,也要把所有POI的tag都一一列举出来,才能搜索到结果.那么,有没有什么办法,可以不用关键字,就搜索到附近全部的POI呢? 答案是肯定的.我们一起来学习一下吧

清华机器学习科学家李建:如何用深度学习来解析时空大数据?

雷锋网AI科技评论按:6月24日下午,钛媒体和杉数科技主办的2017 AI 大师论坛在京举行,论坛邀请了五位算法优化.机器学习领域的顶尖教授.学者出席并发表学术演讲,雷锋网(公众号:雷锋网)记者也对论坛进行了跟踪报道.本篇内容根据机器学习领域专家李建的论坛分享实录整理而成. 李建,清华大学交叉信息研究院助理教授.杉数科技科学家,美国马里兰大学博士.国内机器学习领域最顶尖的前沿科学家之一,国际学术会议VLDB 2009和ESA 2010最佳论文奖获得者,清华211基础研究青年人才支持计划以及教育部

如何用PS画出机器人大白

  最近以男子扮大白,向女友告白,而且成功了,让大白再次成为又萌又暖心的代表.不过,扮大白还是需要很坚强的心的,如果能画出大白,然后再写上自己想告白的话,是不是也会提高告白成功的概率呢.现在就让小编教大家如何用PS画出大白的方法. 分类: PS入门教程

如何用Lightroom修出航拍大片

  如何用Lightroom修出航拍大片          1.压暗天空亮度 首先,将图片套用第三套预设(页面最后有下载链接),快速定下色彩基调. 原片 这时候我们发现天空有过曝的迹象,于是使用LR界面右边的渐变滤镜,将其固定在画面的地平线处,适当降低曝光度,并提高高光,这样天空压暗的同时,太阳这部分也不会太过突兀.再降低一些饱和度,这样一张完整的作品就完成了. 2.提高特定区域亮度 后期是需要活学活用的,我们并不一定要通过压暗亮度来展现天空,我们有时也可以反其道而行之,故意提高曝光度,使得天空

如何用opencv识别出摄像头前面简单的圆柱体和长方体

问题描述 如何用opencv识别出摄像头前面简单的圆柱体和长方体 如题~应该如何处理图片(用到什么函数,大致的步骤),万分感谢~ 解决方案 http://www.pudn.com/downloads591/sourcecode/graph/opencv/detail2417042.html 解决方案二: 这两个物体区别还是很明显的,可以先提取轮廓,然后用不变矩方法做下匹配.

360浏览器表示“百度搜索出问题了”

重庆晨报讯 (记者 刘淳)虽然百度一直低调,但"3B大战"仍然是目前互联网界的关注焦点.昨日,有网友微博爆料称,在使用360浏览器访问百度时遭遇屏蔽,浏览器建议用户切换到360搜索或其他搜索.对此,360安全浏览器表示,不存在拦截百度首页的情况. 该爆料网友说,他在使用360浏览器访问百度的时候出现了这样的画面:360浏览器表示"百度搜索出问题了",建议用户切换到360搜索或其他搜索. 昨日下午,针对这一事件,360安全浏览器发布了特别说明表示,360安全浏览器不会

java-如何用Java找出网页Email?

问题描述 如何用Java找出网页Email? 对于这样的处理当然用正则表达式,但是有的时候对我要查找的网页分成了很多页.例如http://tieba.baidu.com/p/4032901264(把显示出来的超链接当作Email吧,举例子没找到合适的). 解决方案 分了很多页,先找到下一页的链接,然后循环获取,直到找不到再下一页为止. 解决方案二: java正则表达式匹配网页email(email抓取)简单的从网页获取Email的Java小程序JAVA语言用正则表达式抓取网页中的email

如何用swing画出这样类似饼状的图案

问题描述 如何用swing画出这样类似饼状的图案 这是一个演示队列的程序,方块的颜色会随着数字的移动,我想问一下是要用一个类描绘还是怎么实现.

矩形和圆 位置关系-如何用C++写出:判断矩形和圆的位置关系?

问题描述 如何用C++写出:判断矩形和圆的位置关系? 我知道有四种关系,相交,包含(两种),相离. 圆包含矩形的情况可以 检测圆的四个坐标轴方向点的坐标是否在矩形内或在矩形上 矩形包含圆的情况可以 检测矩形的四点是否在圆中 但是矩形和圆相交相离就不知道怎么判断了....