40分求助

B3625 迷宫寻路

dengzijun @ 2022-08-30 16:16:05

代码:

#include<cstdio>
#include<queue>
using namespace std;
struct node
{
    int x,y;
};
int direction[4][2]=
{
    {-1,0},
    {0,-1},
    {0,1},
    {1,0}
};
int n,m;
char a[105][105];
bool visit[105][105];
bool ans_flag;
void dfs(int x,int y)
{
    if(x==n&&y==m)
    {
        ans_flag=true;
        return;
    }
    for(int i=0;i<4;i++)
    {
        int nx=x+direction[i][0],ny=y+direction[i][1];
        if(nx<1||nx>n||ny<1||ny>m)
        {
            continue;
        }
        if(a[nx][ny]=='#'||visit[nx][ny])
        {
            continue;
        }
        visit[nx][ny]=true;
        dfs(nx,ny);
        //visit[nx][ny]=false;
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",a[i]+i);
    }
    visit[1][1]=true;
    dfs(1,1);
    if(ans_flag)
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
    return 0;
}

以及BFS版本:

#include<cstdio>
#include<queue>
using namespace std;
struct node
{
    int x,y;
};
int direction[4][2]=
{
    {-1,0},
    {0,-1},
    {0,1},
    {1,0}
};
int n,m;
char a[105][105];
bool visit[105][105];
queue<node>q;
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",a[i]+i);
    }
    q.push((node){1,1});
    while(!q.empty())
    {
        node front=q.front();
        q.pop();
        int x=front.x;
        int y=front.y;
        if(visit[x][y])
        {
            continue;
        }
        visit[x][y]=true;
        if(x==n&&y==m)
        {
            printf("Yes\n");
            return 0;
        }
        for(int i=0;i<4;i++)
        {
            int nx=x+direction[i][0];
            int ny=y+direction[i][1];
            if(nx<1||nx>n||ny<1||ny>m)
            {
                continue;
            }
            if(a[nx][ny]=='#')
            {
                continue;
            }
            q.push((node){nx,ny});
        }
    }
    printf("No\n");
    return 0;
}

这些代码都只有40分,且只有2、3、4、9测试点是AC的。


by lzy2011 @ 2022-08-30 16:45:57

输入的问题吧


by lzy2011 @ 2022-08-30 16:48:30

for(int i=1;i<=n:++i){ for(intj=1;j<=m;++j)cin>>a[i][j]; }


by lzy2011 @ 2022-08-30 16:56:33

3 5 .##.# .....

.##.


|