题目描述
给一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
const c:array[1..7]of char=('y','i','z','h','o','n','g'); ss:array[1..8]of longint=(-1,-1,-1,0,0,1,1,1); sss:array[1..8]of longint=(-1,0,1,-1,1,-1,0,1); var a:array[0..101,0..101]of char; b:array[0..101,0..101]of boolean; i,j,k,n,m:longint; s:ansistring; p:boolean; procedure init; var i,j,k:longint; begin readln(n); for i:=1 to n do begin readln(s); for j:=1 to n do a[i,j]:=s[j]; end; end; function aa(k,l,r,t:longint):boolean; var x,i,j:longint; p:boolean; begin p:=false; if k>7 then exit(true); if a[l,r]<>c[k] then exit(false); if k=1 then begin for x:=1 to 8 do begin i:=l+ss[x]; j:=r+sss[x]; if aa(k+1,i,j,x) then begin b[l,r]:=true;p:=true; end; end; end else begin i:=l+ss[t]; j:=r+sss[t]; if aa(k+1,i,j,t) then begin b[l,r]:=true;p:=true; end; end; if p then exit(true) else exit(false); end; begin init; for i:=1 to n do for j:=1 to n do begin if (b[i,j]) then continue; if (not(aa(1,i,j,0))) then b[i,j]:=false else b[i,j]:=true; end; for i:=1 to n do for j:=1 to n do if not(b[i,j]) then a[i,j]:='*'; for i:=1 to n do begin for j:=1 to n do write(a[i,j]); writeln; end; end.
输出样例#1:
******* ******* ******* ******* ******* ******* *******