vergel123 2023-12-19 17:33 采纳率: 50%
浏览 10

请问这个迷宫寻路的dfs算法错哪里了

请问这个迷宫寻路的dfs算法错哪里了
这个样例答案是10,但以下代码输出6
5 8 0 0 4 6
0 1 1 1 0 0 0 0
0 0 0 1 0 0 0 0
0 1 0 0 0 1 0 0
0 1 1 1 0 1 1 0
1 0 0 0 0 0 0 0


#include<stdio.h>
int startx,starty,endx,endy;
int min=99999;
int m,n,map[30][30]={0};  //m->row n->column
int directx[4]={0,1,0,-1},
    directy[4]={1,0,-1,0};
void dfs(int x,int y,int step)
{   
    int i;
    if(x==endx&&y==endy)
    {
        if(min>step)
        min=step;
        return;
    }
    for(i=0;i<4;i++)
    {
        x=x+directx[i];
        y=y+directy[i];
        if(x<m&&y<n&&x>=0&&y>=0)
        {
            if(map[x][y]==0)
            {
                map[x][y]=1;
                dfs(x,y,step+1);
                map[x][y]=0;
            }
        }
    }
    return;
}
int main()
{
    scanf("%d %d %d %d %d %d",&m,&n,&startx,&starty,&endx,&endy);
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        scanf("%d",&map[i][j]);
    }
    map[startx][starty]=1;
    dfs(startx,starty,0);
    printf("%d",min);
}
  • 写回答

1条回答 默认 最新

  • K_n_i_g_h_t_1990 2023-12-19 20:11
    关注
    
    #include<stdio.h>
    int startx,starty,endx,endy;
    int min=99999;
    int m,n,map[30][30]={0};  //m->row n->column
    int directx[4]={0,1,0,-1},
        directy[4]={1,0,-1,0};
    void dfs(int x,int y,int step)
    {   
        int i;
        if(x==endx&&y==endy)
        {
            if(min>step)
            min=step;
            return;
        }
        for(i=0;i<4;i++)
        {
            //使用临时变量来存储下一步的坐标
            int tx = x + directx[i];
            int ty = y + directy[i];
            //使用<=来判断是否越界
            if(tx<=m&&ty<=n&&tx>=0&&ty>=0)
            {
                if(map[tx][ty]==0)
                {
                    map[tx][ty]=1;
                    dfs(tx,ty,step+1);
                    map[tx][ty]=0;
                }
            }
        }
        return;
    }
    int main()
    {
        scanf("%d %d %d %d %d %d",&m,&n,&startx,&starty,&endx,&endy);
        int i,j;
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            scanf("%d",&map[i][j]);
        }
        map[startx][starty]=1;
        dfs(startx,starty,0);
        //加上换行符
        printf("%d\n",min);
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月19日