bfs怎么写记忆化,T了

P1141 01迷宫

@[Acwing_zbz](/user/1038943) 数据太多了每次都搜会TLE,可以用连通块的思想 ```cpp #include<bits/stdc++.h> using namespace std; long long n,m,x,y,tx,ty,dx[5]={-1,1,0,0},dy[5]={0,0,-1,1},vis[1111][1111],ans,sum[1111],t=1,av[1111][1111]; char a[1111][1111]; struct node{ int x,y; }; void bfs(int x0,int y0){ vis[x0][y0]=1; queue<node>q; q.push({x0,y0}); ans=1; while(!q.empty()){ x=q.front().x; y=q.front().y; q.pop(); av[x][y]=t; for(int i=0;i<4;i++){ tx=x+dx[i]; ty=y+dy[i]; if(a[x][y]!=a[tx][ty]&&vis[tx][ty]==0&&tx>=1&&tx<=n&&ty>=1&&ty<=n) vis[tx][ty]=1,q.push({tx,ty}),ans++; } } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(vis[i][j]==0){ bfs(i,j); sum[t]=ans; t++; } } } while(m--){ cin>>x>>y; cout<<sum[av[x][y]]<<endl; } return 0; } ```
by chen_kun @ 2024-03-27 17:38:11


@[chen_kun](/user/469311) 大佬如果用记忆化的话该怎么存储呢?
by Acwing_zbz @ 2024-03-27 17:42:46


|