给一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:
#######
#######
#######
#######
#######
#######
#######

典型的深搜,就是过程有点麻烦,先规定一个字符串yizhong,深度每增加1,对应字符串位置加一。
AC代码;
#include <bits/stdc++.h>
using namespace std;
int c[110][110]={0};
char bb[30]="yizhong";
int b[110][2]={0};
int n;
char a[110][110];
void dfs(int x,int y,int t,int fang)//fang是记录方向;t记录深度;
{
if(t==7)//代表成功,用C字符串记录;
{
for(int i=0;i<7;i++)
{
c[b[i][0]][b[i][1]]=1;
}
}
else
{
if(fang==1)
{
if(x-1>=0&&y-1>=0&&a[x-1][y-1]==bb[t])
{
b[t][0]=x-1;
b[t][1]=y-1;
dfs(x-1,y-1,t+1,fang);
}
}
else if(fang==2)
{
if(y-1>=0&&a[x][y-1]==bb[t])
{
b[t][0]=x;
b[t][1]=y-1;
dfs(x,y-1,t+1,fang);
}
}
else if(fang==3)
{
if(y+1<n&&x+1<n&&a[x+1][y+1]==bb[t])
{
b[t][0]=x+1;
b[t][1]=y+1;
dfs(x+1,y+1,t+1,fang);
}
}
else if(fang==4)
{
if(x+1<n&&a[x+1][y]==bb[t])
{
b[t][0]=x+1;
b[t][1]=y;
dfs(x+1,y,t+1,fang);
}
}
else if(fang==5)
{
if(y-1>=0&&x+1<n&&a[x+1][y-1]==bb[t])
{
b[t][0]=x+1;
b[t][1]=y-1;
dfs(x+1,y-1,t+1,fang);
}
}
else if(fang==6)
{
if(y+1<n&&a[x][y+1]==bb[t])
{
b[t][0]=x;
b[t][1]=y+1;
dfs(x,y+1,t+1,fang);
}
}
else if(fang==7)
{
if(y+1<n&&x-1>=0&&a[x-1][y+1]==bb[t])
{
b[t][0]=x-1;
b[t][1]=y+1;
dfs(x-1,y+1,t+1,fang);
}
}
else if(fang==8)
{
if(x-1>=0&&a[x-1][y]==bb[t])
{
b[t][0]=x-1;
b[t][1]=y;
dfs(x-1,y,t+1,fang);
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s",&a[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]=='y')
{
b[0][0]=i;//这里要把第一个位置标记一下,因为dfs函数没记录第一个;
b[0][1]=j;
for(int w=1;w<=8;w++)
{
dfs(i,j,1,w);
}
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(c[i][j]==0)
{
printf("*");
}
else
{
printf("%c",a[i][j]);
}
}
printf("\n");
}
return 0;
}
来源:https://www.cnblogs.com/xiaolaji/p/9124994.html
