设置一个对应的布尔数组,初始化为0.
枚举每个点8个方向。
判断该方向是否为 yizhong
如果是将对应该方向7个布尔变量置1。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char str[102][102];
int ans[101][102];
int r[8]={-1,-1,0,1,1,1,0,-1},c[8]={0,1,1,1,0,-1,-1,-1};//八个方向
int ok;
int n;
int main(){
memset(ans,0,sizeof(ans));
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%s",&str[i]);
/*for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%c",str[i][j]);
}
printf("\n");
}*/
for(int i=0;i<n;i++)//对n*n每个位置进行判断
for(int j=0;j<n;j++)
{
if(str[i][j]=='y')//判断第一个字母
{
for(int k=0;k<8;k++)
{
int d1=i,d2=j,ok=1; //设置方向起点以及确认标记
for(int kk=1;kk<=6;kk++)//一个方向
{
d1+=r[k];
d2+=c[k];
if(ok==0)break;
if(d1<0||d2<0||d1>=n||d2>=n){ok=0;break;}//判断边界
if(kk==1&&str[d1][d2]!='i')ok=0;
if(kk==2&&str[d1][d2]!='z')ok=0;
if(kk==3&&str[d1][d2]!='h')ok=0;
if(kk==4&&str[d1][d2]!='o')ok=0;
if(kk==5&&str[d1][d2]!='n')ok=0;
if(kk==6&&str[d1][d2]!='g')ok=0;
}
if(ok)//如果该方向符合,将布尔数组这条方向全部置1
{
d1=i,d2=j;
for(int p=0;p<7;p++){
ans[d1][d2]=1;
d1+=r[k];
d2+=c[k];
}
}
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(ans[i][j])
printf("%c",str[i][j]);
else printf("*");
}
printf("\n");
}
return 0;
}
/*
7
yizhong
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
*/
8个方向用两个一维数组来组合生成。