#include<stdio.h>
#include<string.h>
char map[1005][1005];
char s[1005];
int m,n,t;
int sx,sy;
int div[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};//
struct ANS
{
int x,y;
char towards;
}ans[1005];
struct tree
{
tree *next[30];
int id;
int time;
tree()
{
id=0;
for(int i=0;i<30;i++)
{
next[i]=NULL;
}
}
}*root;
void set(char *s,int t)
{
tree *item=root;
int x=strlen(s);
for(int i=0;i<x;i++)
{
int j=s[i]-'A';
if(item->next[j]==NULL)
{
item->next[j]=new tree;
}
item=item->next[j];
}
item->id=t;
}
void dfs(tree *item,int nx,int ny,int to)
{
if(item==NULL)
{
return ;
}
if(item->id>0)
{
ans[item->id].x=sx;
ans[item->id].y=sy;
ans[item->id].towards=to+'A';
}
if(nx<0||ny<0||nx>=n||ny>=m)
{
return ;
}
dfs(item->next[map[nx][ny]-'A'],nx+div[to][0],ny+div[to][1],to);
}
int main()
{
int i,j,k;
scanf("%d%d%d",&n,&m,&t);
root=new tree;
for(i=0;i<n;i++)
{
scanf("%s",map[i]);
}
for(i=1;i<=t;i++)
{
scanf("%s",s);
set(s,i);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
for(k=0;k<8;k++)
{
sx=i;
sy=j;
dfs(root,i,j,k);
}
}
}
for(i=1;i<=t;i++)
{
printf("%d %d %c\n",ans[i].x,ans[i].y,ans[i].towards);
}
}
POJ1204 - Word Puzzles - 字典树
最新推荐文章于 2015-03-02 13:39:39 发布