https://www.luogu.org/problem/show?pid=1101
很恶心的代码 就是八个方向都搜索
#include<bits/stdc++.h> using namespace std; int n; char s[120][120],t[120][120];//一个是刚开始的 一个是结束的 char nex[] = {'y','i','z','h','o','n','g'}; int dfs(int x,int y,int k,int d) { if(k == 6 && s[x][y] =='g') { //puts("yes"); if(d == 1 ) { for(int i=0;i<=6;i++) t[x][y-i] = nex [6-i]; } if(d == 2 ) { for(int i=0;i<=6;i++){ t[x][y+i] = nex[6-i]; } } if(d==3 ){ for(int i=0;i<=6;i++) t[x-i][y] = nex[6-i]; } if(d==4 ){ for(int i=0;i<=6;i++) t[x+i][y] = nex[6-i]; } if(d==5 ){ for(int i=0;i<=6;i++) t[x-i][y-i] = nex[6-i]; } if(d==6 ){ for(int i=0;i<=6;i++) t[x+i][y+i] = nex[6-i]; } if(d==7){ for(int i=0;i<=6;i++) t[x-i][y+i] = nex[6-i]; } if(d==8){ for(int i=0;i<=6;i++) t[x+i][y-i] = nex[6-i]; } return 0; } if(d== 1 && y+1 <= n&&s[x][y+1] == nex[k+1] ) //往右 dfs(x,y+1,k+1,d); if(d== 2 && y-1 >=1 && s[x][y-1] == nex[k+1]) //往左 dfs(x,y-1,k+1,d); if(d==3 && x+1 <= n && s[x+1][y] == nex[k+1])//往下 dfs(x+1,y,k+1,d); if(d==4 && x-1>=1 && s[x-1][y]==nex[k+1])//往上 dfs(x-1,y,k+1,d); if(d==5 && x+1<=n && y+1<=n && s[x+1][y+1]==nex[k+1])//斜下 dfs(x+1,y+1,k+1,d); if(d==6 && x-1>=1 && y-1>=1 && s[x-1][y-1]==nex[k+1])//斜上 dfs(x-1,y-1,k+1,d); if(d==7 && x+1<=n && y-1>=1 && s[x+1][y-1]==nex[k+1])//左斜下 dfs(x+1,y-1,k+1,d); if(d==8 && x-1>=1 && y+1<=n && s[x-1][y+1]==nex[k+1]) dfs(x-1,y+1,k+1,d); } int main () { cin >> n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>s[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) t[i][j] = '*'; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(s[i][j] == 'y') { for(int d=1;d<=8;d++) { dfs(i,j,0,d); } } } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<< t[i][j]; cout<<endl; } }