题目
题目描述
给一n×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。
输入格式
第一行输入一个数nn。( 7≤n≤100)。
第二行开始输入n×n的字母矩阵。
输出格式
突出显示单词的n×n矩阵。
#include <bits/stdc++.h>
using namespace std;
string word="yizhong";
char a[105][105];
int vis[105][105]={0},to[8][2]{-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1};
int n,flag;
void find(int x,int y){
for(int i=0;i<8;i++){
flag=1;
for(int j=0;j<7;j++){
int xx=x+j*to[i][0],yy=y+j*to[i][1];
if(xx<0||xx>=n||yy<0||yy>=n||word[j]!=a[xx][yy]){
flag=0;
break;
}
}
if(flag){
for(int j=0;j<7;j++){
int xx=x+j*to[i][0],yy=y+j*to[i][1];
vis[xx][yy]=1;
}
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]=='y'){
find(i,j);
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(!vis[i][j]) cout<<'*';
else cout<<a[i][j];
}
cout<<endl;
}
return 0;
}