rt, 代码如下:
#include<iostream>
using namespace std;
struct Node{
int x,y;
};
char map[100][100];
int n;
char word[8]="yizhong";
short offx[8]={0,0,-1,1,-1,1,-1,1};
short offy[8]={-1,1,0,0,-1,-1,1,1};
char ans[100][100];
int num;
Node start[10000];
void setans(int x,int y,int dire)
{
ans[x][y]='g';
for(int i=0;i<6;++i)
ans[x-offx[dire]][y-offy[dire]]=word[6-i];
}
void dfs(int x,int y,int cnt,int dire)
{
if(cnt==6&&map[x][y]=='g')
{
setans(x,y,dire);
return;
}
if(x+offx[dire]<0||x+offx[dire]>=n||y+offy[dire]<0||y+offy[dire]>=n||map[x+offx[dire]][y+offy[dire]]=='*'||map[x+offx[dire]][y+offy[dire]]!=word[cnt+1])
return;
dfs(x+offx[dire],y+offy[dire],cnt+1,dire);
}
int main()
{
cin>>n;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
{
cin>>map[i][j];
if(map[i][j]!='y'&&map[i][j]!='i'&&map[i][j]!='z'&&map[i][j]!='h'&&map[i][j]!='o'&&map[i][j]!='n'&&map[i][j]!='g')
ans[i][j]='*',map[i][j]='*';
if(map[i][j]=='y')
start[num].x=i,start[num++].y=j;
}
for(int i=0;i<num;++i)
for(int j=0;j<8;++j)
dfs(start[i].x,start[i].y,0,j);
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
cout<<ans[i][j];
cout<<"\n";
}
}
本地调试时正确地通过了样例1,样例2的输出为:
* ig
g ** **
i* * *
** **
* **
**** i
g
代码看不懂私我