DFS迷宫问题

DFS迷宫问题

c 复制代码
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

int p,q;//终点位置
int n,m;//图的大小
int minStep = INT_MAX;//最小步数的存放
int a[100][100];//表格位置1表示空地,2表述障碍物
int visit[100][100];//0表示未访问,1表示访问
int direction[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};

/*
5 4
1 1 2 1
1 1 1 1
1 1 2 1
1 2 1 1
1 1 1 2
1 1 4 3
 */

void dfs(int x,int y,int step)
{

    //判断终点条件
    if(x == p && y == q)
    {
        if(step < minStep)
        {
            minStep = step;
        }
        return;//回溯
    }
    for(int i = 0;i < 4;i++)
    {
        int nx = x + direction[i][0];
        int ny = y + direction[i][1];

        if(a[nx][ny] == 1&& visit[nx][ny] == 0)
        {
            visit[nx][ny] = 1;
            dfs(nx,ny,step+1);
            visit[nx][ny] = 0;
        }
    }
    return;
}

int main()
{
    int startx,starty;

    scanf("%d %d",&n,&m);
    for(int i = 1;i <= n;i++){
        for(int j= 1;j <= m;j++){
            scanf("%d",&a[i][j]);//表格位置1表示空地,2表述障碍物
        }
    }

    scanf("%d %d %d %d",&startx,&starty,&p,&q);//输入起点位置和终点位置
    visit[startx][starty] = 1;
    dfs(startx,starty,0);

    printf("%d\n",minStep);


    return 0;
}
相关推荐
uesowys5 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
ValhallaCoder5 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮5 小时前
AI 视觉连载1:像素
算法
智驱力人工智能5 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥6 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风6 小时前
代码随想录第十五天
数据结构·算法·leetcode
XX風7 小时前
8.1 PFH&&FPFH
图像处理·算法
NEXT067 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
代码游侠7 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
想进个大厂7 小时前
代码随想录day37动态规划part05
算法