#include <stdio.h>
    
    #include <stdlib.h>
    
    void dfs(int x,int y,int steo);
    
    int n,m;//迷宫有n行m列
    
    int p,q;//p,q为重点坐标
    
    int min=9999;
    
    int a[50][50],book[50][50];
    
    int main()
    
    {
    
    
    int i,j;//循环变量
    
    int startx,starty;//起点坐标
    
    printf(“请输入迷宫行数n和列数m\n”);
    
    scanf(“%d %d”,&n,&m);
    
    printf(“请输入迷宫\n”);
    
    for(i=1;i<=n;i++)
    
    for(j=1;j<=m;j++)
    
    {
    
    
    scanf(“%d”,&a[i][j]);
    
    getchar();
    
    }
    
    printf(“请输入起点,终点坐标\n”);
    
    scanf(“%d %d %d %d”,&startx,&starty,&p,&q);
    
    book[startx][starty]=1;//从起点开始搜索
    
    dfs(startx,starty,0);
    
    printf(“最小步数为\n”);
   
return 0;
    }
    
    void dfs(int x,int y,int step)
    
    {
    
    
    int next[4][2]={
    
    {1,0},{0,1},{-1,0},{0,-1}};
    
    if(x
    
     p&&y
    
    q)//判断是否到达终点,也就是递归边界
    
    {
    
    
    if(step<min)
    
    min=step;
    
    return;
    
    }
    
    int tx,ty;//下一步的坐标
    
    int k;//循环变量
    
    for(k=0;k<=3;k++)
    
    {
    
    
    tx=x+next[k][0];
    
    ty=y+next[k][1];
    
    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;
    
    }
   
 
