2518: 【普及-】【P1101】单词方阵
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:12
解决:5
题目描述
给一 的字母方阵,内可能蕴含多个 yizhong 单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用 * 代替,以突出显示单词。例如:
输入: 8 输出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g输入
第一行输入一个数 。()。
第二行开始输入 的字母矩阵。
输出
突出显示单词的 矩阵。
样例输入 复制
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
样例输出 复制
*******
*******
*******
*******
*******
*******
*******
提示
#include<bits/stdc++.h>
using namespace std;
int n,mark[105][105]={0},dx[8]={0,-1,-1,-1,0,1,1,1},dy[8]={-1,-1,0,1,1,1,0,-1};
char fz[105][105]={0};
string yz="yizhong";
void search(int x,int y) {
for(int i=0;i<8;i++) {
int tx,ty,m=1;
for(int j=0;j<yz.size();j++) {
tx=x+j*dx[i];
ty=y+j*dy[i];
if(fz[tx][ty]!=yz[j]) {
m=0;
break;
}
}
if(m==0) continue;
for(int j=0;j<yz.size();j++) {
mark[x+j*dx[i]][y+j*dy[i]]=1;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
cin>>fz[i][j];
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
search(i,j);
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if(mark[i][j]) cout<<fz[i][j];
else cout<<"*";
}
cout<<endl;
}
return 0;
}