时间限制1.00s 内存限制125.00MB 难易度:普及−
【题目描述】
给一 n×n 的字母方阵,内可能蕴含多个 yizhong
单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 8 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用 *
代替,以突出显示单词。
【输入格式】
第一行输入一个数 n。(7≤n≤100)。
第二行开始输入 n×n 的字母矩阵。
【输出格式】
突出显示单词的 n×n 矩阵。
【输入输出样例】
输入 #1
7 aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa
输出 #1
******* ******* ******* ******* ******* ******* *******
输入 #2
8 qyizhong gydthkjy nwidghji orbzsfgz hhgrhwth zzzzzozo iwdfrgng yyyygggg
输出 #2
*yizhong gy****** n*i***** o**z**** h***h*** z****o** i*****n* y******g
【参考代码】
#include<bits/stdc++.h>
using namespace std;
char a[110][110];
bool vis[110][110];
int dx[10]={0,0,1,1,1,-1,-1,-1};
int dy[10]={1,-1,-1,0,1,-1,0,1};
char s[10]="yizhong";
int n,cnt=1;
int main()
{
cin>>n;
for(int i=0; i<n; ++i)
cin>>a[i];
for(int x=0;x<n;++x)
for(int y=0;y<n;++y)
if(a[x][y]=='y') //找单词首字母。
for(int i=0;i<8;i++) //找方向。
{
int j;
for(j=1;j<7;j++) //按方向依次遍历。
{
int nx=x+j*dx[i];
int ny=y+j*dy[i];
if(a[nx][ny]!=s[j])//如果某个字母不符合,就排除。
break;
}
if(j==7)
for(int k=0;k<7;k++)
vis[x+k*dx[i]][y+k*dy[i]]=1;
}
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
if(vis[i][j])
cout<<a[i][j];
else cout<<"*";
cout<<endl;
}
return 0;
}