写出来出现一大堆“yizhong”
一看是想复杂了
只用沿着一个方向dfs就行
用循环可以简化程序
#include <iostream>
using namespace std;
const int MAXN = 1e2 + 5;
string mode = "yizhong";
int ans[MAXN][MAXN] = {0};
int move[8][2] = { {-1,-1}, {-1,0} , {-1,1}, {0,-1}, {0,1} , {1,-1} ,{1,0}, {1,1}};
char txt[MAXN][MAXN];
int N, tf = 0;
int pos[7][2];
void init()
{
for(int i = 0; i < 7; i++)
{
ans[ pos[i][0] ][ pos[i][1] ] = 1;
}
}
void dfs(int x, int y, int rit, int dir)
{
pos[rit][0] = x;
pos[rit][1] = y;
if(rit == 6)
{
init();
return ;
}
int tx, ty;
tx = x + move[dir][0];
ty = y + move[dir][1];
if(tx >= 0 && tx < N && ty >= 0 && ty < N && txt[tx][ty] == mode[rit + 1])
{
dfs(tx, ty, rit + 1, dir);
}
}
int main()
{
cin>>N;
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
cin>>txt[i][j];
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
if(txt[i][j] == 'y')
{
for(int k = 0; k < 8; k++)
{
dfs(i, j, 0, k);
}
}
}
}
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
if(ans[i][j] == 1)
cout<<txt[i][j];
else
cout<<'*';
}
cout<<endl;
}
return 0;
}
DFS(深度优先搜索)