给一nXn的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red]可以[/color]交叉,因此有可能共用字母。输出时,将不是单词的字母用“*”代替,以突出显示单词。例如:
输入:
8 输出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g
输入输出格式
输入格式:
第一行输入一个数n。(7<=n<=100)。
第二行开始输入nXn的字母矩阵。
输出格式:
突出显示单词的nXn矩阵。
输入输出样例
输入样例#1:
7 aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa
输出样例#1:
******* ******* ******* ******* ******* ******* *******
//记录每个 y 的位置,将每个 y 进行一次深搜,8 个方向
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=110;
const char s[]={' ','y','i','z','h','o','n','g'};
char c[N][N],my;
int a[N][N];
int n;
struct node{
int x,y;
}E[N*N];
int js;
inline int read()
{
int x=0;char c=getchar();
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
return x;
}
void bfs(int num)
{
int x=E[num].x,y=E[num].y;
if(x>=7)
{
bool flag=1;
for(int i=1;i<=6&&flag;i++)
if(c[x-i][y]!=s[i+1])
flag=0;
for(int i=0;flag&&i<=6;i++)
a[x-i][y]=3;
}
if(n-x>=6)
{
bool flag=1;
for(int i=1;i<=6&&flag;i++)
if(c[x+i][y]!=s[i+1])
flag=0;
for(int i=0;flag&&i<=6;i++)
a[x+i][y]=3;
}
if(y>=7)
{
bool flag=1;
for(int i=1;i<=6&&flag;i++)
if(c[x][y-i]!=s[i+1])
flag=0;
for(int i=0;i<=6&&flag;i++)
a[x][y-i]=3;
}
if(n-y>=6)
{
bool flag=1;
for(int i=1;i<=6&&flag;i++)
if(c[x][y+i]!=s[i+1])
flag=0;
for(int i=0;flag&&i<=6;i++)
a[x][y+i]=3;
}
if(x>=7&&y>=7)
{
bool flag=1;
for(int i=1;i<=6&&flag;i++)
if(c[x-i][y-i]!=s[i+1])
flag=0;
for(int i=0;flag&&i<=6;i++)
a[x-i][y-i]=3;
}
if(n-x>=6&&y>=7)
{
bool flag=1;
for(int i=1;i<=6&&flag;i++)
if(c[x+i][y-i]!=s[i+1])
flag=0;
for(int i=0;flag&&i<=6;i++)
a[x+i][y-i]=3;
}
if(x>=7&&n-y>=6)
{
bool flag=1;
for(int i=1;i<=6&&flag;i++)
if(c[x-i][y+i]!=s[i+1])
flag=0;
for(int i=0;flag&&i<=6;i++)
a[x-i][y+i]=3;
}
if(n-x>=6&&n-y>=6)
{
bool flag=1;
for(int i=1;i<=6&&flag;i++)
if(c[x+i][y+i]!=s[i+1])
flag=0;
for(int i=0;flag&&i<=6;i++)
a[x+i][y+i]=3;
}
return ;
}
int main()
{
n=read();
scanf("%c",&my);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>my;
c[i][j]=my;
if(my=='y')
E[++js].x=i,E[js].y=j;
}
for(int i=1;i<=js;i++)
bfs(i);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(a[i][j]==3)
printf("%c",c[i][j]);
else
printf("*");
printf("\n");
}
return 0;
}
/*
8
qyizhong
gydthkjy
nwidghji
orbzsfgz
hhgrhwth
zzzzzozo
iwdfrgng
yyyygggg
*/
来源:https://www.cnblogs.com/lyqlyq/p/7100712.html