#include<bits/stdc++.h>
using namespace std;
char Map[110][110];
bool visit[110][110];
int n;
int dx[]={1,1,1,-1,-1,-1,0,0};
int dy[]={0,-1,1,0,-1,1,-1,1};
char next(char a){
if(a=='y'){
return 'i';
}
else if(a=='i'){
return 'z';
}
else if(a=='z'){
return 'h';
}
else if(a=='h'){
return 'o';
}
else if(a=='o'){
return 'n';
}
else if(a=='n'){
return 'g';
}
else{
return ';';
}
}
char lat(char a){
if(a=='g'){
return 'n';
}
else if(a=='n'){
return 'o';
}
else if(a=='o'){
return 'h';
}
else if(a=='h'){
return 'z';
}
else if(a=='z'){
return 'i';
}
else if(a=='i'){
return 'y';
}
else{
return '*';
}
}
char dfs(int x,int y,int size,int last){
if(size==7){
visit[x][y]=true;
Map[x][y]='g';
return 'g';
}
for(int i=0;i<8;i++){
int new_x=x+dx[i];
int new_y=y+dy[i];
if(new_x>0&&new_y>0&&new_x<=n&&new_y<=n&&next(Map[x][y])==Map[new_x][new_y]&&(last==-1||last==i)){
char o=lat(dfs(new_x,new_y,size+1,i));
if(visit[x][y]==false||(Map[x][y]=='*'&&o!='*')){
Map[x][y]=o;
}
if(Map[x][y]!='*'){
visit[x][y]=true;
}
return Map[x][y];
}
}
return '*';
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>Map[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(!visit[i][j]&&Map[i][j]=='y'){
Map[i][j]=dfs(i,j,1,-1);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(visit[i][j]){
cout<<Map[i][j];
}
else{
cout<<"*";
}
}
cout<<endl;
}
return 0;
}
看起来没有问题,可就是60,有大佬帮帮本蒟蒻吗