题目链接:http://poj.org/problem?id=1204

思路分析:由于题目数据较弱,使用暴力搜索;对于所有查找的单词建立一棵字典树,在图中的每个坐标,往8个方向搜索查找即可;

需要注意的是查找时不能匹配了一个单词就不在继续往该方向查找,因为在某个坐标的某个方向上可能会匹配多个单词,所以需要一直

查找直到查找到该方向上最后一个坐标;

代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; const int KIND = ;
const int MAX_N = + ;
int row, column, num_word;
char map[MAX_N][MAX_N], words[MAX_N];
int dir[][] = {-, , -, , , , , , , , , -, , -, -, -};
int pos[MAX_N][]; struct Node {
Node *next[KIND];
bool end;
int order;
Node()
{
memset(next, , sizeof(next));
end = false;
order = ;
}
}; void CreateTrie(Node *root, char *str, int j)
{
int i = ;
Node *p = root; while (str[i]) {
int value = str[i] - 'A';
if (p->next[value] == NULL)
p->next[value] = new Node();
p = p->next[value];
++i;
}
p->end = true;
p->order = j;
} void Search(Node *root, int i, int j, int k)
{
Node *p = root;
int pos_i = i, pos_j = j, value = ; while (p && <= pos_i && pos_i < row && <= pos_j && pos_j < column) {
value = map[pos_i][pos_j] - 'A';
if (p->next[value]) {
if (p->next[value]->end) {
pos[p->next[value]->order][] = i;
pos[p->next[value]->order][] = j;
pos[p->next[value]->order][] = k;
}
pos_i += dir[k][];
pos_j += dir[k][];
p = p->next[value];
} else
break;
}
} int main()
{
while (scanf("%d %d %d\n", &row, &column, &num_word) != EOF) {
Node *root = new Node; for (int i = ; i < row; ++i) {
for (int j = ; j < column; ++j)
scanf("%c", &map[i][j]);
scanf("\n");
}
for (int i = ; i < num_word; ++i) {
scanf("%s", words);
CreateTrie(root, words, i);
}
for (int i = ; i < row; ++i)
for (int j = ; j < column; ++j)
for (int k = ; k < ; ++k)
Search(root, i, j, k);
for (int i = ; i < num_word; ++i)
printf("%d %d %c\n", pos[i][], pos[i][], pos[i][] + 'A');
}
return ;
}

poj 1204 Word Puzzles(字典树)的更多相关文章

  1. [POJ 1204]Word Puzzles(Trie树暴搜&amp;AC自己主动机)

    Description Word puzzles are usually simple and very entertaining for all ages. They are so entertai ...

  2. 【 POJ - 1204 Word Puzzles】(Trie+爆搜|AC自动机)

    Word Puzzles Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10782 Accepted: 4076 Special ...

  3. [poj] 1204 Word Puzzles || AC自动机

    原题 给个X*Y的字符串矩阵,W个询问,对每个询问输出这个串出现的位置及方向,共有8个方向,顺时针开始分别用A~H表示 AC自动机的板子题. 对于待匹配串建一个自动机,然后从矩阵的四周分别沿八个方向跑 ...

  4. POJ 1204 Word Puzzles | AC 自动鸡

    题目: 给一个字母矩阵和几个模式串,矩阵中的字符串可以有8个方向 输出每个模式串开头在矩阵中出现的坐标和这个串的方向 题解: 我们可以把模式串搞成AC自动机,然后枚举矩阵最外围一层的每个字母,向八个方 ...

  5. POJ 1204 Word Puzzles(AC自动机)

    这题的数据卡在,如下: 5 5 3 ABCDE FGHIJ KLMNO PQRST UVWXY PQR RS RST puzzle中间的行中可以包含要查询的多个单词.这个问题很好解决,SearchDf ...

  6. POJ 2001 Shortest Prefixes(字典树)

    题目地址:POJ 2001 考察的字典树,利用的是建树时将每个点仅仅要走过就累加.最后从根节点開始遍历,当遍历到仅仅有1次走过的时候,就说明这个地方是最短的独立前缀.然后记录下长度,输出就可以. 代码 ...

  7. POJ 题目1204 Word Puzzles(AC自己主动机,多个方向查询)

    Word Puzzles Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10244   Accepted: 3864   S ...

  8. POJ 2408 - Anagram Groups - [字典树]

    题目链接:http://poj.org/problem?id=2408 World-renowned Prof. A. N. Agram's current research deals with l ...

  9. POJ 1816 - Wild Words - [字典树+DFS]

    题目链接: http://poj.org/problem?id=1816 http://bailian.openjudge.cn/practice/1816?lang=en_US Time Limit ...

随机推荐

  1. MarkDown使用 (二)矩阵

    MarkDown的矩阵输入 MarkDown的矩阵输入 简单的Matrix 例如 $$ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ ...

  2. Android 内部存储安装apk文件实现

    目前国内市场的山寨机横行,安卓手机升级也是一天一个样,对于原来老手机可能没有SDCARD,导致我们的APP不能下载资源,无法更新APP,针对这种情况有以下解决方案.通过以下函数判断是否有SD卡再判断下 ...

  3. 为什么要for循环以及for循环的流程

    /* Name:为什么需要循环以及for循环流程 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月10日 03:16:55 Description:求1 ...

  4. 删除windows7保留分区

    在系统里以管理员运行CMD.exe键入diskpartsel disk 0  (select 选择硬盘)list vol  (查看卷)sel vol 0  (选择卷,0为保留分区)inactive ( ...

  5. label 和 legend标签的用法

    label 和 legend标签的用法 label标准用法: 一般浏览器都支持 一般而言,label标签位于表单元素的前面或者后面,为控件提供说明文字 <label for="user ...

  6. HDU 5059 Help him

    题解:先判断第一个是否负号.如果是把第一个符号拿掉之后判断后面的长度是否<=12,并且是否数字,然后转化成数字看看是否在[a,b],注意-0这个数据. 如果不是判断长度是否<=12,并且是 ...

  7. Java图形化界面设计——布局管理器之BorderLayout(边界布局)

  8. Junk-Mail Filter(并差集删点)

    Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. ANDROID对文件的操作介绍

    1. Android遵循MVC设计思想: M(业务层):service V:视图(main.xml). C:Activity 2.使用文件如何对数据进行存储 Activity提供了openFileOu ...

  10. 有感PMI Exam Dev Workshop

    有幸參加了PMI协会在上海举办的PMI Exam Development Workshop活动.这是PMI协会第二次在中国举办此活动,上一次是2009年北京. 我第一次參加,感觉收获非常多. 我们知道 ...