代码:
#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define x first
#define y second
#define N 105
#define M N*N
#define eps 1e-8
using namespace std;
int n,m,top,cnt;
char g[N][N];
pii q[M];
double hash_val[30];
double get_dist(pii a,pii b){
double dx=a.x-b.x,dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
double get_center_dist(){
double sum=0;
double sx=0,sy=0;
for(int i=0;i<top;i++){
sx+=q[i].x;
sy+=q[i].y;
}
sx/=top;sy/=top;
for(int i=0;i<top;i++){
double dx=q[i].x-sx,dy=q[i].y-sy;
sum+=sqrt(dx*dx+dy*dy);
}
return sum;
}
double get_hash(){
double sum=0;
for(int i=0;i<top;i++){
for(int j=0;j<i;j++){
sum+=get_dist(q[i],q[j]);
}
}
return sum+get_center_dist();
}
char get_id(){
double key=get_hash();
for(int i=0;i<cnt;i++){
if(abs(hash_val[i]-key)<eps){
return 'a'+i;
}
}
hash_val[cnt++]=key;
return 'a'+cnt-1;
}
void dfs(int a,int b){
q[top++]={a,b};
g[a][b]=0;
for(int x=a-1;x<=a+1;x++){
for(int y=b-1;y<=b+1;y++){
if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]=='1'){
dfs(x,y);
}
}
}
}
signed main(){
cin>>m>>n;
for(int i=0;i<n;i++){
cin>>g[i];
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(g[i][j]=='1'){
top=0;
dfs(i,j);
char id=get_id();
for(int k=0;k<top;k++){
g[q[k].x][q[k].y]=id;
}
}
}
}
for(int i=0;i<n;i++){
cout<<g[i]<<'\n';
}
return 0;
}
数据:
7
5
1100110
0100010
1100011
1110111
0010001
正确输出:
aa00bb0
0a000b0
aa000bb
aaa0bbb
00a000b
我输出:
aa00aa0
0a000a0
aa000aa
aaa0aaa
00a000a