P1101 单词方阵
无脑暴搜
const int N=110;
char g[N][N];
bool vis[N][N];
int n;
string str="yizhong";
bool check(int x,int y)
{
return x>=0 && x<n && y>=0 && y<n;
}
void dfs(int x,int y,string s,int dir)
{
if(x ==n || y == n) return;
if(s == str)
{
for(int i=0;i<str.size();i++)
{
int a=x-dx8[dir]*i,b=y-dy8[dir]*i;
vis[a][b]=true;
}
return;
}
if(g[x][y] == 'y')
{
for(int i=0;i<8;i++)
{
int a=x+dx8[i],b=y+dy8[i];
if(!check(a,b)) continue;
string t="y";
if(t+g[a][b] != str.substr(0,2)) continue;
dfs(a,b,t+g[a][b],i);
}
}
else
{
int a=x+dx8[dir],b=y+dy8[dir];
if(!check(a,b)) return;
if(s+g[a][b] != str.substr(0,s.size()+1)) return;
dfs(a,b,s+g[a][b],dir);
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) scanf("%s",&g[i]);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
dfs(i,j,"",-1);
for(int i=0;i<n;i++,cout<<endl)
for(int j=0;j<n;j++)
{
if(!vis[i][j])
g[i][j]='*';
cout<<g[i][j];
}
//system("pause");
}