求大佬帮帮忙,并查集写法,70分第6.8.9个点错了
查看原帖
求大佬帮帮忙,并查集写法,70分第6.8.9个点错了
340603
陈家小仙男楼主2021/3/6 14:30
#include<bits/stdc++.h>
using namespace std;
int n,m,ans = 0;
char mp[105][105];
int s[20000];
int dir[4][2] = {0,1,1,-1,1,0,1,1};
void init(){
	for(int i = 1 ; i <= n * m ; i ++){
		s[i] = i;
	}
}


int find(int x){
	if(s[x] == x){
		return s[x];
	}
	else return s[x] = find(s[x]);
}
void Mest(int x,int y){
	int tx = find(x);
	int ty = find(y);
	if(tx != ty){
		s[tx] = ty;
		ans --;
	}
}
int main(){
	cin >> n >> m;
	init();
	for(int i = 1 ; i <= n ; i ++){
		getchar();
		for(int j = 1 ; j <= m ; j ++){
			cin  >> mp[i][j];
			if(mp[i][j] == 'W'){
				ans ++;
			}
		}
	}
	
	for(int i = 1 ; i <= n ; i ++){
		for(int j = 1 ; j <= m ; j ++){
			if(mp[i][j] == 'W'){
				for(int k = 0 ; k < 4 ; k ++){
					if(mp[i + dir[k][0]][j + dir[k][1]] == 'W' && i + dir[k][0] >= 1 && i + dir[k][0] <= n && j + dir[k][1] >= 1 && j + dir[k][1] <= m){
						Mest((i - 1) * n + j,(i - 1 + dir[k][0]) * n + (j + dir[k][1]));
					}
				}
			}
		}
	}
	cout << ans << endl;
}

第六个点数据

12 20

....WWWW....
...WW...
...W
W..WW..WWWWW
..W.
..WWW...
..WW..WW..WW

..WW.....WWW
WW.WW.WW
..W.
..W....W...W
.W..
..W...W.
...WWW.W.W..

........WW..
...W.W..
WWWW
WW.W..W..WW.
.WW.
WWWWWW..
WW..WW..WWWW

.....W..W..W
....W...
WWW.
WWW..W..W..W
..WW
.WW..W..
.W..W..W.WWW

答案是:7 我的输出结果是8

2021/3/6 14:30
加载中...