首页 > 试题广场 >

单词迷阵

[编程题]单词迷阵
  • 热度指数:408 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
单词迷阵游戏就是从一个10x10的字母矩阵中找出目标单词,查找方向可以从左往右、从右往左、从上往下或者从下往上。例如下面的迷阵中包含quot等单词。
rmhlzxceuq
bxmichelle
mnnejluapv
caellehcim
xdydanagbz
xinairbprr
vctzevbkiz
jgfavqwjan
quotjenhna
iumxddbxnd
现给出一个迷阵,请你判断某个单词是否存在其中。

输入描述:
输入有多组数据。

每组数据包含两部分。

第一部分有10行,是一个10x10的字母矩阵。

第二部分第一行包含一个整数n (1≤n≤100),紧接着n行,每行包含一个单词。单词的长度不会超过10。


输出描述:
对应每一个单词,如果它存在于迷阵之中,则输出“Yes”;否则输出“No”。

每一组数据之后输出一个空行作为分隔。
示例1

输入

rmhlzxceuq
bxmichelle
mnnejluapv
caellehcim
xdydanagbz
xinairbprr
vctzevbkiz
jgfavqwjan
quotjenhna
iumxddbxnd
7
dan
danz
brian
michelle
jen
jqi
paul
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
2
aaa
bbb

输出

Yes
Yes
Yes
Yes
Yes
Yes
Yes

Yes
No
import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			Character[][] ch = new Character[10][10];
			for (int i = 0; i < 10; i ++ ) {
				String s = sc.next();
				for (int j = 0; j < 10; j ++ ) {
					ch[i][j] = s.charAt(j);
				}
			}
			String[] res = new String[sc.nextInt()];
			for (int i = 0; i < res.length; i ++ ) {
				if(search(ch, sc.next())) res[i] = "Yes";
				else res[i] = "No";
			}
			for (String s:res) {
				System.out.println(s);
			}
		}
	}
	public static boolean search(Character[][] ch, String s) {
		int[][] direction = {{0, 1}, {0, - 1}, {1, 0}, { - 1, 0}};
		int l = 0;
		for (int i = 0; i < 10; i ++ ) {
			for (int j = 0; j < 10; j ++ ) {
				if(ch[i][j] == s.charAt(0)) {
					for (int k = 0; k < 4; k ++ ) {
						for (l = 0; l < s.length(); l ++ ) {
							int x = i + direction[k][0] * l;
							int y = j + direction[k][1] * l;
							if(x >= 0 && x < 10 && y >= 0 && y < 10 && ch[x][y] == s.charAt(l)) continue;
							else break;
						}
						if(l == s.length()) return true;
					}
				}
			}
		}
		return false;
	}
}

发表于 2016-10-11 02:01:19 回复(0)