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;