写了一上午八十几行。。。结果最后一个点WA了那数据根本没法调啊
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
bool flag = true,flag1=false;
char a[1000][1000],k[10]={' ','y','i','z','h','o','n','g'};
int v[1000][1000],n,k1[10][2]={{0,0},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}},f[1000][2];
int h[1000][1000];
int g=1;
void dfst (int x,int y,int s,int d)
{
if (a[x][y]!=k[s]||h[x][y]==1)
{
flag = false;
h[x][y] = 0;
return;
}
v[x][y] = 1;
h[x][y] = 1;
int x1 = x+k1[d][0];
int y1 = y+k1[d][1];
v[x1][y1] = 1;
if (s==7)
{
v[x][y] = 0;
return;
}
dfst(x1,y1,s+1,d);
if (flag==false) h[x][y] = 0;
v[x][y] = 0;
}
void dfs(int x,int y,int s)
{
if (a[x][y]!='y') return;
v[x][y] = 1;
h[x][y] = 1;
for (int i=1;i<=8;i++)
{
int x1 = x+k1[i][0];
int y1 = y+k1[i][1];
if (a[x1][y1]==k[s+1]&&v[x1][y1]==0&&x1<=n&&y1<=n&&x1>0&&y1>0&&h[x1][y1]==0)
{
v[x1][y1] = 1;
dfst(x1,y1,s+1,i);
v[x1][y1] = 0;
if (flag==true)
{
flag1=true;
break;
}
else
{
flag = true;
}
}
}
v[x][y] = 0;
if (flag==false||flag1==false) h[x][y] = 0;
}
int main()
{
scanf ("%d", &n);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
cin>>a[i][j];
if (a[i][j]=='y')
{
f[g][0] = i;
f[g][1] = j;
g+=1;
}
}
}
for (int i=1;i<=g-1;i++)
{
dfs(f[i][0],f[i][1],1);
flag = true;
flag1 = false;
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
if (h[i][j]==1) printf ("%c", a[i][j]);
else printf ("*");
}
printf ("\n");
}
return 0;
}