Word Puzzles poj 1204
2012-09-15 21:54
429 查看
转载请注明出处,谢谢。/article/5979027.html ——by Roney.
题意:给你一些字符串矩阵,再给你一些字符串,让你在字符串矩阵中找出给你的每一个字符换的首字母的坐标和这个字符串在字符矩阵中的方向,并且要求按所给字符串顺序输出上述信息。
题解:字典树+BFS。用一个二维矩阵存储字符矩阵,用字典树结构存储所给的字符串,并在字典树的结构中用一个变量记录该字符串是第几个输入的。然后对于字符矩阵的每一个位置向八个方向进行搜索并与字典树中存储的字符串进行匹配,一旦与字典树中的某一个字符串匹配成功就将其首字母在矩阵中的信息记录在相应的信息记录结构体中。最后按照顺序输出这些信息即可。
AC代码:
View Code
题意:给你一些字符串矩阵,再给你一些字符串,让你在字符串矩阵中找出给你的每一个字符换的首字母的坐标和这个字符串在字符矩阵中的方向,并且要求按所给字符串顺序输出上述信息。
题解:字典树+BFS。用一个二维矩阵存储字符矩阵,用字典树结构存储所给的字符串,并在字典树的结构中用一个变量记录该字符串是第几个输入的。然后对于字符矩阵的每一个位置向八个方向进行搜索并与字典树中存储的字符串进行匹配,一旦与字典树中的某一个字符串匹配成功就将其首字母在矩阵中的信息记录在相应的信息记录结构体中。最后按照顺序输出这些信息即可。
AC代码:
View Code
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int kind=26; const int N=1005; struct TrieNode{ int num; TrieNode *Next[kind]; TrieNode(){ num=0; for(int i=0;i<kind;i++) Next[i]=NULL; } }; struct ANS{ int x,y,d; }ans ; char map ,str ; int X[]={-1,-1,0,1,1,1,0,-1}; int Y[]={0,1,1,1,0,-1,-1,-1}; TrieNode *Root=NULL; int c,l,w; void Insert(int id,char *s){ TrieNode *p=Root; if(!p)p=Root=new TrieNode; int i=0,branch; while(s[i]){ branch=s[i++]-'A'; if(!p->Next[branch])p->Next[branch]=new TrieNode; p=p->Next[branch]; } p->num=id; } bool ok(int i,int j){ if(i>=0&&i<l&&j>=0&&j<c)return true; return false; } void Search(int mx,int my,int dir){ TrieNode *p=Root; int i=mx,j=my; while(ok(i,j)&&(p->Next[map[i][j]-'A'])){ p=p->Next[map[i][j]-'A']; if((p->num)&&(ans[p->num].d==-1)){ ans[p->num].x=mx; ans[p->num].y=my; ans[p->num].d=dir; } i+=X[dir];j+=Y[dir]; } } void BFS(){ for(int i=0;i<l;i++) for(int j=0;j<c;j++) for(int k=0;k<8;k++) Search(i,j,k); } int main() { //freopen("in.txt","r",stdin); int i; while(scanf("%d %d %d",&l,&c,&w)!=EOF){ for(i=0;i<l;i++) scanf("%s",map[i]); for(i=1;i<=w;i++){ scanf("%s",str); Insert(i,str); ans[i].d=-1; } BFS(); for(i=1;i<=w;i++) printf("%d %d %c\n",ans[i].x,ans[i].y,ans[i].d+'A'); } return 0; }
相关文章推荐
- ACM篇:POJ 1204--Word Puzzles
- POJ1204--Word Puzzles--AC自动机
- poj 1204:Word Puzzles(AC自动机)
- POJ1204 Word Puzzles
- poj 1204 Word Puzzles
- Word Puzzles - POJ 1204 Trie树
- poj 1204 Word Puzzles
- POJ 1204Word Puzzles 字典树
- POJ 1204 Word Puzzles [ Trie树 模板题]
- POJ-1204-Word Puzzles
- POJ 1204 Word Puzzles(AC自动机)
- POJ 1204 Word Puzzles
- poj 1204 Word Puzzles 给出一个N*L的字符矩阵,再给出M个字符串,问这M个字符串在这个字符矩阵中出现的位置 Tire树
- POJ 1204 Word Puzzles - dic_tree + DFS
- POJ 1204 Word Puzzles AC自动机 -
- poj 1204 Word Puzzles
- [POJ 1204]Word Puzzles(Trie树暴搜&AC自己主动机)
- POJ 题目1204 Word Puzzles(AC自己主动机,多个方向查询)
- poj 1204 Word Puzzles 字典树
- Word Puzzles [POJ 1204]