求找错误
  • 板块CF377A Maze
  • 楼主bowlder_lover
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/2/11 18:39
  • 上次更新2023/11/5 03:23:26
查看原帖
求找错误
321687
bowlder_lover楼主2021/2/11 18:39
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int sign=0;//sign=1表示已经找到连通的(initial_field-k)格空地
char map[501][501];
int n,m,k,t;//地图有n行m列,t表示已经走了多少格
int visit[501][501];//数组visit用于记录地图每格是否被访问过
int initial_field;//initial_field为初始化地图时空地的数目
int location[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//4个方位

int boundary_determination(int x,int y)//坐标的边界判定
{
    if(x<0||x>=n||y<0||y>=m)//若坐标越界
    {
        return 0;
    }
    return 1;
}

int DFS(int round,int colume)
{
    int i,x,y;
    if(sign)//若已找到可行解
    {
        return 0;
    }
    if(t==(initial_field-k))//若已经走完了该走的格数
    {
        sign=1;
        return 0;
    }
    if(!boundary_determination(round,colume))
    {
        return 0;
    }
    if(map[round][colume]=='#')//若此格为墙
    {
        return 0;
    }
    if(visit[round][colume])//若当前格已访问
    {
        return 0;
    }
    visit[round][colume]=1;//将当前格标记为已访问
    t++;
    for(i=0;i<4;i++)
    {
        x=round+location[i][0];
        y=colume+location[i][1];
        DFS(x,y);
    }
    return 0;
}

int main()
{
    int i,j,a,b;
    memset(visit,0,sizeof(visit));
    //输入数据
    scanf("%d%d%d",&n,&m,&k);
    for(i=0;i<n;i++)
    {
        scanf("%s",map[i]);
    }
    //计算初始化地图时空地的数目
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(map[i][j]=='.')
            {
                initial_field++;
            }
        }
    }
    //
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(map[i][j]=='.')
            {
                DFS(i,j);
                break;
            }
            if(sign)//若找到可行解
            {
                for(a=0;a<n;a++)
                {
                    for(b=0;b<m;b++)
                    {
                        if(map[a][b]=='.'&&!visit[a][b])//若该格为空地且未被访问
                        {
                            printf("X");//则该格应被变为墙
                        }
                        else
                        {
                            printf("%c",map[a][b]);//否则原样输出
                        }
                    }
                    printf("\n");//换行
                }
                return 0;
            }
        }
    }
    return 0;
}

样例2是不是答案不止一种啊

求大佬帮看一下错误

2021/2/11 18:39
加载中...