题目:
输入输出样例
输入
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa输出
。*******
。 *******
。*******
。*******
。*******
。*******
。*******
输入
8
qyizhong
gydthkjy
nwidghji
orbzsfgz
hhgrhwth
zzzzzozo
iwdfrgng
yyyygggg输出
yizhong
gy*****
ni*****
oz***
hh***
zo**
i*****n
y****g
代码:
package 搜索;
import java.util.Scanner;
public class P1101单词方阵 {
static int n;
static char[][] A=new char[110][110];
static char[][] ans=new char[110][110];
static String cmp="yizhong";
static int[] a={0,0,1,-1,1,-1,-1,1};
static int[] b={1,-1,0,0,1,1,-1,-1};
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
for (int i = 1; i <= n; i++) {
String s=sc.next();
for (int j = 1; j <= n; j++) {
A[i][j]=s.charAt(j-1);
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (A[i][j]=='y')
dfs(i,j);
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (ans[i][j]==0){
ans[i][j]='*';
}
System.out.print(ans[i][j]);
}
System.out.println();
}
}
public static void dfs(int x,int y){
for (int i = 0; i < 8; i++) {
int flag=1;
for (int j = 1; j <= 6 ; j++) {
int nx=x+j*a[i];
int ny=y+j*b[i];
if (nx<1||nx>n||ny<1||ny>n){
flag=0;
break;
}
if (cmp.charAt(j)!=A[nx][ny]) {
flag = 0;
break;
}
}
if (flag==0)
continue;
for (int j = 0; j <= 6 ; j++) {
int nx=x+j*a[i];
int ny=y+j*b[i];
ans[nx][ny]=A[nx][ny];
}
}
}
}