深度优先搜索

题目原意:

小哼去解救小哈,地图为矩阵,上面有许多障碍物。求解救小哈的最短路径。

INPUT
第一行:两个数据,行数n和列数m,中间用空格隔开
接下来的n行m列:输入迷宫,0表示空地,1表示障碍物,每一行的每个数用空格隔开
最后一行:四个数据,前两个为迷宫入口的坐标,后两个为小哈的x和y坐标

#include <cstdio>
int n,m,p,q,min=99999999;
int a[51][51],book[51][51];
void dfs(int x,int y,int step)
{
    int next[4][2]={
        {0,1},//向右走
        {1,0},//向下走
        {0,-1},//向左走
        {-1,0}//向上走
    };
    int tx,ty,k;
    //判断是否到达小哈的位置
    if(x==p&&y==q)
    {
        //更新最小值
        if(step<min)
            min=step;
        return ;//这里的返回值很重要
    }
    //枚举四种走法
    for(k=0;k<=3;k++)
    {
        //计算下个点的坐标
        tx=x+next[k][0]; //下个点的横坐标
        ty=y+next[k][1];//下个点的纵坐标
        /*
         第一轮,k=0,x+0,行的位置不变;    y+1,列的位置向右移一个;总的来说向右移动,对应{0,1}
         第二轮,k=1,x+1,行的位置向下移动; y+0,列的位置不变;     总的来说向下移动,对应{1,0}
         ......
         
         */
        //判断是否越界
        if(tx<1||tx>n||ty<1||ty>m)
            continue;
        //判断该点是否为障碍物或者已经在路径中
        if(a[tx][ty]==0&&book[tx][ty]==0)
        {
            book[tx][ty]=1;//标记这个点已经走过
            dfs(tx, ty, step+1);//开始尝试下一个点
            book[tx][ty]=0;//尝试结束,取消这个点的标记
        }
    }
    return ;
    /*
     总的来说是自身不断的调用自己
     总是按照next的方向走,
     如果向规定的第一个方向走,如果没有到达终点并且没有碰到墙的话,继续走下一个点
     如果这个方向的点碰到墙的话,就返回换规定的下一个方向走,如果方向都尝试完都走不通的话,就返回上一个点,直到到达终点
     */
}
/*
 测试数据:
 5 4
 0 0 1 0
 0 0 0 0
 0 0 1 0
 0 1 0 0
 0 0 0 1
 1 1 4 3
 */
int main()
{
    int i,j,startx,starty;
    //读入n和m,n为行,m为列
    scanf("%d %d",&n,&m);
    //读入迷宫
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    //读入起点和终点坐标
    scanf("%d %d %d %d",&startx,&starty,&p,&q);
    //从起点开始搜索
    book[startx][startx]=1;//标记起点已在路径中,放置后面重复再走
    //第一个参数是起点坐标的x坐标,第二个参数是起点的y坐标,第三个参数是初始步数为0
    dfs(startx,starty,0);
    printf("%d",min);
    getchar();getchar();
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容