题目链接: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. Unity StrangeIoc框架 (二)

    MVCSContex :the big picture 1.应用程序的入口是一个类成为ContextView,这是一个Monobehavior实例化MVCSContext 2.用MVCSContext ...

  2. MySQL varchar和char类型

    varchar和char是两种最主要的字符串类型.不幸的是,很难精确地解释这些值是怎么储存在磁盘和内存中的,因为这根存储引擎的具体实现有关.下面的描述假设使用的存储引擎是InnoDB或者MyISAM. ...

  3. hadoop笔记之hdfs

    1.HDFS设计基础与目标 1.HDFS设计基础与目标 (1)硬件错误是常态,因此需要冗余. (2)流式数据访问.即数据批量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理. (3)大规 ...

  4. 在sqlite中使用索引

    出处: 网络 1)Sqlite不支持聚集索引,android默认需要一个_id字段,这保证了你插入的数据会按“_id”的整数顺序插入,这个integer类型的主键就会扮演和聚集索引一样的角色.所以不要 ...

  5. Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

    说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...

  6. 9_Permanent Storage

    9 // // ViewController.swift // Permanent Storage // // Created by ZC on 16/1/9. // Copyright © 2016 ...

  7. DatabaseMetaData的用法(转)

    http://blog.csdn.net/sdliubo/article/details/6546889

  8. Python GUI编程各种实现的对比

    Python GUI编程各种实现的对比 从 Python 语言的诞生之日起,就有许多优秀的 GUI 工具集整合到 Python 当中,这些优秀的 GUI 工具集,使得 Python 也可以在图形界面编 ...

  9. 男装电子零售商East Dane即将面世_衣装_YOKA时尚网

    男装电子零售商East Dane即将面世_衣装_YOKA时尚网 男装电子零售商East Dane即将面世

  10. 第八届河南省赛C.最少换乘(最短路建图)

    C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 94  Solved: 25 [Submit][Status][Web Board] De ...