java P1101 单词方阵

题目描述
给一n×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 8 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。例如:

输入:
8 输出:
qyizhong yizhong
gydthkjy gy
*****
nwidghji ni*****
orbzsfgz oz
***
hhgrhwth hh***
zzzzzozo z
o**
iwdfrgng i*****n

yyyygggg y
****g

输入格式
第一行输入一个数 n。(7≤n≤100)。

第二行开始输入n×n的字母矩阵。

输出格式
突出显示单词的n×n矩阵。

输入输出样例

输入 #1

7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
这里是引用

aaaaaaa

输出 #1

‘ *******
‘ *******
‘ *******
‘ *******
‘ *******
’ *******
’ *******

输入 #2

8
qyizhong
gydthkjy
nwidghji
orbzsfgz
hhgrhwth
zzzzzozo
iwdfrgng
yyyygggg

输出 #2

yizhong
gy
*****
ni*****
oz
***
hh***
z
o**
i*****n

y
****g

import java.util.*;

public class Main {

	static int[] dx = {1,1,1,0,0,-1,-1,-1}; // 1 表示向右 一格 0 表示不变 -1 表示向左 一格
	static int[] dy = {1,0,-1,1,-1,1,-1,0}; // 0 表示不变 -1 表示向下, 1 表示向上
	static String cmp = "yizhong";
	
	static char[][] A = new char[110][110]; //  存放字符
	static char[][] ans = new char[110][110]; //  能组成 目标字符串的标记
	static int n;  //  方格数
	
	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*dx[i];
				int ny = y + j*dy[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*dx[i];
				int ny = y + j*dy[i];
				ans[nx][ny] = A[nx][ny];
			}
		}
		
	}
	
	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
	     n = in.nextInt();
	     
	     for (int i = 1; i <= n; i++) {
			String s = in.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();
		}
		
	}
}

你可能感兴趣的:(程序题目)