10pts,其余全WA

P1141 01迷宫

Atserckcn @ 2024-07-22 21:53:35

蒟蒻地问一句,这题记忆化深搜不行吗?

#include<bits/stdc++.h>
using namespace std;
const int N=1005,M=1e5+5;
char g[N][N],f[N][N],ans[M][2];
int startx,starty;
int n,m,nxt[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
bool vis[N][N];
int step;
void dfs(int x,int y)
{
    ans[++step][0]=x;ans[step][1]=y;
    for(int i=0;i<4;i++)
    {
        int tx=x+nxt[i][0],ty=y+nxt[i][1];
        if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&g[x][y]!=g[tx][ty]&&!vis[tx][ty]){
            vis[tx][ty]=true;
            dfs(tx,ty);
        }
    }
    return;
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%s",g[i]);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(!vis[i][j])
            {
                vis[i][j]=true;
                step=0;
                dfs(i,j);
                for(int i=1;i<=step;i++)
                    f[ans[i][0]][ans[i][1]]=step;
            }
        }
    }
    while(m--)
    {
        scanf("%d%d",&startx,&starty);
        printf("%d\n",f[startx][starty]);
    }
    return 0;
}

by Atserckcn @ 2024-07-22 22:04:03

for(int k=1;k<=step;k++)
    f[ans[k][0]][ans[k][1]]=step;

|