P1101 单词方阵
#include<bits/stdc++.h>
using namespace std;
struct way{
int x,y;
}w[7];//记录路线
int n;
char str[100][100],a[8]="yizhong";
int vis[100][100]={0};//记录所有路线
int d[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
void dfs(int i,int j,int p,int fx){
if(p==7){
for(int k=0;k<7;k++){
vis[w[k].x][w[k].y]=k+1;
}
return ;
}
i+=d[fx][0];
j+=d[fx][1];
if(i>=n||j>=n||i<0||j<0){}
else if(str[i][j]==a[p]){
w[p].x=i;
w[p].y=j;
dfs(i,j,p+1,fx);
}
i-=d[fx][0];
j-=d[fx][1];
}
int main(){
int i,j;
cin>>n;
for(i=0;i<n;i++){
cin>>str[i];
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(str[i][j]==a[0]){//找到y
w[0].x=i;
w[0].y=j;
for(int k=0;k<8;k++){
i+=d[k][0];
j+=d[k][1];
if(i>=n||j>=n||i<0||j<0){}
else if(str[i][j]==a[1]){//找到i,用来确定查找方向
w[1].x=i;
w[1].y=j;
dfs(i,j,2,k);
}
i-=d[k][0];
j-=d[k][1];
}
}
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(vis[i][j]){
cout<<a[vis[i][j]-1];
}
else cout<<'*';
}
cout<<endl;
}
return 0;
}