题目大意:在一个矩阵puzzle中寻找字典中的单词,输出单词的起始位置和方向;
使用trie树,叶子节点中记录方向和起始坐标,通过对每个puzzle中的字母为起始位置进行bfs即可。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
char puzzle[1050][1050];
struct node
{
bool f;
int next[26];
int d;
int x;int y;
void Init(){f=0;memset(next,-1,sizeof(next));d=9;x=-1;y=-1;};
}a[10000010];
int p=0;
void makeroot()
{
a[p=0].Init();
}
void insert(char* str)
{
int i=0;
int cur=0;
int index=0;
int len=strlen(str);
//cout<<"Insert "<<str<<endl;
for(i=0;i<len;i++)
{
cur=str[i]-'A';
if(a[index].next[cur]==-1)
{
a[++p].Init();
a[index].next[cur]=p;
}
//cout<<"index now : "<<index<<' '<<cur<<endl;
index=a[index].next[cur];
}
//cout<<index<<"!!!!!!!!!!"<<endl;
a[index].f=1;
}
int line,column;
bool in(int x,int y)
{
if(0<=x&&x<line&&y>=0&&y<column)
return 1;
else
return 0;
}
void find(int x,int y,int d)
{
int index=0;
int cur;
int ox;
int oy;
ox=x;
oy=y;
while(in(x,y))
{
cur=puzzle[x][y]-'A';
//cout<<"&&&&&&& "<<x<<' '<<y<<' '<<index<<' '<<char(cur+'A')<<' '<<'%'<<a[index].f<<endl;
if(a[index].f==1)
{
//cout<<"Find one!"<<endl;
a[index].d=d;
a[index].x=ox;
a[index].y=oy;
}
if(a[index].next[cur]==-1)
{
return ;
}
index=a[index].next[cur];
x+=dx[d];
y+=dy[d];
}
if(a[index].f==1)
{
//cout<<"Find one!"<<endl;
a[index].d=d;
a[index].x=ox;
a[index].y=oy;
}
}
int ans(char* str)
{
int index=0;
int cur;
int len=strlen(str);
for(int i=0;i<len;i++)
{
cur=str[i]-'A';
index=a[index].next[cur];
}
//cout<<index<<"$$$$$$$$$$"<<endl;
return index;
}
char ind[1010][1050];
int main()
{
int i=0;
int j=0;
int word;
makeroot();
cin>>line>>column>>word;
for(i=0;i<line;i++)
{
scanf("%s",puzzle[i]);
}
//cout<<"puzzle"<<endl;
for(i=0;i<word;i++)
{
scanf("%s",ind[i]);
//cout<<'&'<<ind[i]<<endl;
insert(ind[i]);
}
//cout<<"step 2"<<endl;
for(i=0;i<line;i++)
{
for(j=0;j<column;j++)
{
for(int k=0;k<8;k++)
{
find(i,j,k);
}
}
}
//find(0,15,6);
//cout<<"step 3"<<endl;
for(i=0;i<word;i++)
{
int key=ans(ind[i]);
printf("%d %d %c\n",a[key].x,a[key].y,a[key].d+'A');
//cout<<a[key].x<<' '<<a[key].y<<' '<<char(a[key].d+'A')<<endl;
}
return 0;
}
分享到:
相关推荐
poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客
【标题】"POJ-1009"是北大在线编程竞赛平台上的一个题目,它涉及到计算机科学中的算法和编程技巧。POJ(Problem Set of Peking University)是中国北京大学主办的一个在线编程竞赛平台,旨在提高学生的算法设计和...
POJ---1456.Supermarket测试数据及答案,题目描述:A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral ...
标题“POJ3253-POJ3253-Fence Repair【STL优先队列】”指的是一个在线编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。该题目要求参赛者使用C++编程语言解决特定的问题,并且在解决方案中...
POJ-3299解题 C++源代码 Description Adapted from Wikipedia, the free encyclopedia The humidex is a measurement used by Canadian meteorologists to reflect the combined effect of heat and humidity. It...
### ACM新手刷题攻略之POJ ... - 推荐题目:[poj1068](https://vjudge.net/problem/POJ-1068)、[poj2632](https://vjudge.net/problem/POJ-2632)、[poj1573](https://vjudge.net/problem/POJ-1573)、[poj2993]...
【标题】"POJ-2151.rar_poj"是一个与编程竞赛相关的压缩文件,主要涉及的问题是“检查问题的难度”,并且是为动态规划的实战练习而设计的。这个题目来自于著名的在线编程竞赛平台POJ(Programming Online Judge)。 ...
【标题】"poj-1028-Web-Navigation.zip_poj" 指向的是一个编程竞赛问题,POJ(Programming Online Judge)平台上的第1028题,名为“Web Navigation”。该问题通常涉及到算法设计和实现,可能是为了考察参赛者的编程...
【标题】"poj-2528 Mayor's posters 测试数据及答案"涉及的是一个编程竞赛中的问题,这个问题来源于POJ(Programming Online Judge)平台,编号为2528。POJ是一个在线的编程练习系统,它提供了一系列的问题供程序员...
2. "POJ2002-Squares.doc":这可能是一个Microsoft Word文档,包含了详细的解题报告,可能包括问题分析、算法描述、解题步骤、运行结果和可能的优化措施等。 详细说明: 在"POJ2002-Squares"这个问题中,参赛者可能...
标题中的“POJ-1170.rar_poj”指的是编程竞赛网站POJ(Programming Online Judge)上的一个问题,编号为1170。POJ是一个在线的编程练习平台,主要面向学习和提升算法与编程技能的用户。这个问题的解决方案可能包含在...
【标题】"POJ1496-Word Index" 是一个来自北京大学在线判题系统POJ(Problem Set of Peking University)的编程题目。这个题目主要涉及到字符串处理、哈希函数以及查找算法等计算机科学的基础知识。 【描述】"北大...
《POJ2525-Text Formalization:深入解析TrieTree》 在计算机科学的世界里,算法和数据结构是解决问题的关键。今天我们要探讨的是一个名为"POJ2525-Text Formalization"的问题,它涉及到一种高效的数据结构——Trie...
《POJ 1000 - 2000 部分题目 官方分类》 编程竞赛,特别是在线判题系统(如POJ,即Problem Online Judge)中的题目,是提升编程技能和算法理解的重要途径。POJ 1000 - 2000 是一个涵盖广泛的题目区间,包含了大量的...