POJ 1204 Word Puzzles [ Trie树 模板题]

题意:

从一个字母表里面找出目标字符串。

思路:

很裸的字典树。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Abs(a) ((a)>0?(a):(-(a)))
#define llong long long int
using namespace std;
const int N=1005;
const int inf=(1<<30);
int n,m,w;
char a[N][N];
char word[N][N];
bool vis[N];
int ans[N][3];
int mx[8]={0,1,1,1,0,-1,-1,-1};
int my[8]={-1,-1,0,1,1,1,0,-1};
struct Trie
{
    int end;
    Trie * next[26];
    Trie()
    {
        end=-1;
        memset(next,0,sizeof(next));
    }
};
Trie * root =new Trie;
void Trie_insert(Trie * t,char * s,int index)
{
    if(*s!='\0')
    {
        if(t->next[*s-'A']==0)
        {
            t->next[*s-'A']=new Trie;
        }
        Trie_insert(t->next[*s-'A'],s+1,index);
    }
    else
    {
        t->end=index;
    }
}
void Trie_search(Trie * t,int ox,int oy,int x,int y,int k)
{
    if(!t)
    {
        return;
    }
    if(t->end!=-1&&!vis[t->end])
    {
        vis[t->end]=true;
        ans[t->end][0]=oy;
        ans[t->end][1]=ox;
        ans[t->end][2]=k;
    }
    if(y<0||x<0||y>=n||x>=m)
      return;
    Trie_search(t->next[a[y][x]-'A'],ox,oy,x+mx[k],y+my[k],k);
}
/*void Trie_print(Trie * t)
{
    if(t->end!=-1)
    {
        printf(" %d\n",t->end);
        return;
    }
    for(int i=0;i<26;i++)
    {
        if(t->next[i]!=NULL)
        {
            printf("%c",i+'A');
            Trie_print(t->next[i]);
        }
    }
}*/
void solve()
{
    for(int i=0;i<n;i++)
      for(int j=0;j<m;j++)
      {
          for(int k=0;k<8;k++)
          {
              Trie_search(root,j,i,j,i,k);
          }
      }
    for(int i=1;i<=w;i++)
      printf("%d %d %c\n",ans[i][0],ans[i][1],ans[i][2]+'A');
}
int main()
{
    scanf("%d%d%d",&n,&m,&w);
    for(int i=0;i<n;i++)
    {
        scanf("%s",a[i]);
    }
    for(int i=1;i<=w;i++)
    {
        scanf("%s",word[i]);
        Trie_insert(root,word[i],i);
    }
    solve();
    return 0;
}
    原文作者:Trie树
    原文地址: https://blog.csdn.net/wuyanyi/article/details/7440360
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞