qwq求调
#include<bits/stdc++.h>
using namespace std;
int n,m[101][101],dp[8][2]={{1,1},{1,0},{1,-1},{0,1},{0,-1},{-1,1},{-1,0},{-1,-1}},vis[101][101]={};
int find(int i,int j,int n,int found){
if(n==7){
vis[i][j]=1;
return 1;
}
int flag=0;
if(n==1){
for(int k=0;k<8;k++){
int di=i+dp[k][0];
int dj=j+dp[k][1];
if(m[di][dj]==n+1){
if(find(di,dj,n+1,k)==1){
vis[di][dj]=1;
flag=1;
}
}
}
}else{
int di=i+dp[found][0];
int dj=j+dp[found][1];
if(m[di][dj]==n+1){
if(find(di,dj,n+1,found)==1){
vis[di][dj]=1;
flag=1;
}
}else{
return 0;
}
}
if(flag){
vis[i][j]=1;
return 1;
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
char s;
cin>>s;
switch(s){
case 'y':m[i][j]=1;break;
case 'i':m[i][j]=2;break;
case 'z':m[i][j]=3;break;
case 'h':m[i][j]=4;break;
case 'o':m[i][j]=5;break;
case 'n':m[i][j]=6;break;
case 'g':m[i][j]=7;break;
default:m[i][j]=0;break;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(m[i][j]==1){
find(i,j,1,0);
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(vis[i][j]){
switch(m[i][j]){
case 1:cout<<"y";break;
case 2:cout<<"i";break;
case 3:cout<<"z";break;
case 4:cout<<"h";break;
case 5:cout<<"o";break;
case 6:cout<<"n";break;
case 7:cout<<"g";break;
}
}else{
cout<<"*";
}
}
if(i==n-1){
return 0;
}
cout<<"\n";
}
return 0;
}
T^T感谢大佬T^T