zoukankan      html  css  js  c++  java
  • 解救小哈——dfs深搜

    • 问题描述:

    小哈去玩迷宫,结果迷路了,小哼去救小哈。迷宫由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
    ",minn);
        return 0;
    }
  • 相关阅读:
    网络流
    KMP算法
    光现象
    物理学习须知
    声现象
    常见物理量测量方法
    洛谷 P1373 小a和uim之大逃离
    洛谷 P1242 新汉诺塔
    电磁现象
    磁化
  • 原文地址:https://www.cnblogs.com/boboyuzz/p/10417329.html
Copyright © 2011-2022 走看看