p1141(01迷宫)
题目传送们
题目不难
但有很多细节要注意
首先如果每一个都去求一遍连通块
时间复杂度较高(o(n*n*m))会爆炸
于是我们就想到了拿数组记录答案
记得数组要开大一点
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,id=0,p,q,num=0;
int a[1000005];
string s[1001];
bool vis[1005][1005];
int ps[1005][1005];
int dx[10]={1,-1,0,0},dy[10]={0,0,1,-1};
void dfs(int x,int y){
num++;
ps[x][y]=id;
vis[x][y]=1;
for(int i=0;i<4;i++){
int nx= x+dx[i];
int ny= y+dy[i];
if(nx >= 0 and ny >= 0 and nx < n and ny < n and s[nx][ny] != s[x][y] and vis[nx][ny] == 0){
dfs(nx,ny);
}
}
return;
}
int main(){
cin >> n >> m;
for(int i=0;i<n;i++){
cin >> s[i];
}
for(int i=0;i<n;i+