码迷,mamicode.com
首页 > 其他好文 > 详细

解救小哈——dfs深搜

时间:2019-02-22 12:00:31      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:style   oid   路径   code   起点   单元格   组成   最短路   inf   

问题描述:

小哈去玩迷宫,结果迷路了,小哼去救小哈。迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物。

问题:帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径。(注意:障碍物不能走,小哼也不能走出迷宫外,0表示空地,1表示障碍物)

输入:

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

输出:

7

代码:

#include<cstdio>
#include<iostream>
#define INF 10000000
using namespace std;
int n,m,sx,sy,ex,ey,tx,ty;
int a[50][50],b[50][50];
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//四个方向
int minn=INF;

void dfs(int x,int y,int step)
{
    if(x==ex&&y==ey)
    {
        if(step<minn)
            minn=step;
        return ;
    }
    for(int i=0;i<4;i++)
    {
        tx=x+next[i][0];
        ty=y+next[i][1];
        if(ty<1||tx<1||ty>m||tx>n)//越界
        {
            continue;
        }
        if(b[tx][ty]==0&&a[tx][ty]==0)//这个位置没有走过并且是空地
        {
            b[tx][ty]=1;//标记
            dfs(tx,ty,step+1);
            b[tx][ty]=0;
        }
    }
    return ;
}

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    scanf("%d%d%d%d",&sx,&sy,&ex,&ey);//起点和终点坐标
    b[sx][sy]=1;//最开始在起点位置,标记
    dfs(sx,sy,0);
    printf("%d\n",minn);
    return 0;
}

 

解救小哈——dfs深搜

标签:style   oid   路径   code   起点   单元格   组成   最短路   inf   

原文地址:https://www.cnblogs.com/boboyuzz/p/10417329.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!