整体的思路:
在矩阵中找到‘y’,然后对‘y'进行八个方向的搜索
用cmp数组存“yizhong”,在每一个方向中和cmp进行比较,若存在任意一个不同,则处理下一个方向。
#include<iostream>
#include<string>
using namespace std;
const int dx[] = {1, 1, 1, 0, 0, -1,-1,-1 }; //方向数组
const int dy[] = {1, 0,-1, 1,-1, 0 , 1,-1 };
const string cmp = "yizhong"; // 比较数组
char a[105][105],ans[105][105];
int n;
void dfs(int x,int y)
{
for(int i=0;i<8;i++)//8个方向
{
int flag=1;
for(int j=1;j<7;j++)//第i个方向去查找“yizhong”
{
int nx=x+j*dx[i];
int ny=y+j*dy[i];
if(nx<1||nx>n||ny<1||ny>n)
{
flag=0;
break;
}
if(cmp[j]!=a[nx][ny])//如果出现一次不同,则此方向不通
{
flag=0;
break;
}
}
if(flag==0)//进行下一个方向
continue;
for(int j=0;j<7;j++ )
{//查找成功
int nx=x+j*dx[i];
int ny=y+j*dy[i];
ans[nx][ny]=a[nx][ny];
}
}
return ;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]=='y')
dfs(i,j);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(ans[i][j]==0)
ans[i][j]='*';
cout<<ans[i][j];
}
cout<<endl;
}
return 0;
}