题目点这里
思路很简单,读入矩阵后再扫一遍,扫到’y’就八个方向判断一下是否有,用一个bool数组来储存信息。实现起来也十分简单,下面贴出代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int n,fx[8]={1,1,1,-1,-1,-1,0,0},fy[8]={-1,0,1,-1,0,1,-1,1};
bool b[101][101];
char a[101][101],dy[200];
void dfs(int x,int y,int dir){
if(x+fx[dir]*6<1||x+fx[dir]>n) return;
if(y+fy[dir]*6<1||y+fy[dir]>n) return;
int zx=x,zy=y;
for(int i=1;i<=6;i++){
if(dy[a[zx][zy]]!=a[zx+fx[dir]][zy+fy[dir]]) return;
zx=zx+fx[dir];
zy=zy+fy[dir];
}
for(int i=1;i<=7;i++){
b[x][y]=true;
x=x+fx[dir];
y=y+fy[dir];
}
}
int main(){
dy['y']='i';
dy['i']='z';
dy['z']='h';
dy['h']='o';
dy['o']='n';
dy['n']='g';
memset(b,false,sizeof(b));
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'){
for(int k=0;k<=7;k++) dfs(i,j,k);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(b[i][j]) cout<<a[i][j];
else cout<<"*";
}
cout<<endl;
}
return 0;
}