给一n×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 8 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。例如:
输入:
8 输出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g
输入输出格式
输入格式:
第一行输入一个数n。(1007≤n≤100)。
第二行开始输入n×n的字母矩阵。
输出格式:
突出显示单词的n×n矩阵。
输入输出样例
输入样例#1: 复制
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
输出样例#1: 复制
给一n×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。例如:
输入:
8 输出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g
输入输出格式
输入格式:
第一行输入一个数nn。(1007≤n≤100)。
第二行开始输入n×n的字母矩阵。
输出格式:
突出显示单词的n×n矩阵。
输入输出样例
输入样例#1: 复制
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
输出样例#1: 复制
*******
*******
*******
*******
*******
*******
*******
#include <iostream>
#include <cstring>
using namespace std;
bool flag[110][110]={0};
bool s[110][110]={0};
char a[110][110]={0};
int c[110]={0},d[110]={0};
char h[10]={"yizhong"};
bool r[8]={0};//上下左右,左上右上,左下右下
int n;
void dfs(int x,int y,int cur){
int i,j;
if(cur>=7){
for(i=0;i<7;i++){
s[c[i]][d[i]]=1;
}
}else{
if(a[x-1][y]==h[cur]&&r[0]||a[x-1][y]==h[cur]&&cur==1){//上
if(cur==1) r[0]=1;
c[cur]=x-1,d[cur]=y;
dfs(x-1,y,cur+1);
c[cur]=0,d[cur]=0,r[0]=0;
}
if(a[x+1][y]==h[cur]&&r[1]||a[x+1][y]==h[cur]&&cur==1){//下
if(cur==1) r[1]=1;
c[cur]=x+1,d[cur]=y;
dfs(x+1,y,cur+1);
c[cur]=0,d[cur]=0,r[1]=0;
}
if(a[x][y+1]==h[cur]&&r[2]||a[x][y+1]==h[cur]&&cur==1){//右
if(cur==1) r[2]=1;
c[cur]=x,d[cur]=y+1;
dfs(x,y+1,cur+1);
r[2]=0;c[cur]=0,d[cur]=0;
}
if(a[x][y-1]==h[cur]&&r[3]||a[x][y-1]==h[cur]&&cur==1){//左
if(cur==1) r[3]=1;
c[cur]=x,d[cur]=y-1;
dfs(x,y-1,cur+1);
r[3]=0;c[cur]=0,d[cur]=0;
}
if(a[x-1][y-1]==h[cur]&&r[4]||a[x-1][y-1]==h[cur]&&cur==1){//左上
if(cur==1) r[4]=1;
c[cur]=x-1,d[cur]=y-1;
dfs(x-1,y-1,cur+1);
r[4]=0;c[cur]=0,d[cur]=0;
}
if(a[x+1][y-1]==h[cur]&&r[5]||a[x+1][y-1]==h[cur]&&cur==1){//左下
if(cur==1) r[5]=1;
c[cur]=x+1,d[cur]=y-1;
dfs(x+1,y-1,cur+1);
r[5]=0;c[cur]=0,d[cur]=0;
}
if(a[x-1][y+1]==h[cur]&&r[6]||a[x-1][y+1]==h[cur]&&cur==1){//右上
if(cur==1) r[6]=1;
c[cur]=x-1,d[cur]=y+1;
dfs(x-1,y+1,cur+1);
r[6]=0;c[cur]=0,d[cur]=0;
}
if(a[x+1][y+1]==h[cur]&&r[7]||a[x+1][y+1]==h[cur]&&cur==1){//右下
if(cur==1) r[7]=1;
c[cur]=x+1,d[cur]=y+1;
dfs(x+1,y+1,cur+1);
r[7]=0;c[cur]=0,d[cur]=0;
}
}
}
int main()
{
cin>>n;
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++) cin>>a[i][j];
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[i][j]=='y'){
c[0]=i,d[0]=j;
dfs(i,j,1);
}
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(!s[i][j]) cout<<"*";
else cout<<a[i][j];
}
cout<<endl;
}
return 0;
}