博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1204 Word Puzzles(字典树+搜索)
阅读量:5886 次
发布时间:2019-06-19

本文共 1323 字,大约阅读时间需要 4 分钟。

题意:在一个字符矩阵中找每个给定字符串的匹配起始位置和匹配方向(A到H表示八个方向);

思路:将给定字符串插入字典树中,遍历字符矩阵,在每个字符处向八个方向用字典树找。

#include
#include
#include
using namespace std;typedef struct node{ int num; node *next[26];}node;node *head;char str[1005][1005],ch[1005][1005];int n,m,w;int x,y,direction;int result[1005][1005];int dir[8][2]={-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1,-1,-1};void init(node *h){ for(int i=0;i<26;i++) { h->next[i]=NULL; h->num=0; }}void h_insert(char s[],int id)//建树{ node *t,*s1=head; int n=strlen(s); for(int i=0;i
next[k]==NULL) { t=new node; init(t); s1->next[k]=t; } s1=s1->next[k]; } s1->num=id;}void dfs(node *p,int a,int b,int d)//搜索{ if(p==NULL) return; if(p->num>0) { result[p->num][0]=x; result[p->num][1]=y; result[p->num][2]=d; } if(a<0||b<0||a>=n||b>=m) return;//放在后面判断 dfs(p->next[str[a][b]-'A'],a+dir[d][0],b+dir[d][1],d);}int main(){ int i,j,k; while(scanf("%d%d%d",&n,&m,&w)!=EOF) { head=new node; init(head); memset(str,0,sizeof(str)); memset(ch,0,sizeof(ch)); memset(result,0,sizeof(result)); for(i=0;i

 

转载于:https://www.cnblogs.com/dashuzhilin/p/4502848.html

你可能感兴趣的文章
java spark WordCount
查看>>
HttpClient和HtmlUnit的比较总结
查看>>
禁止匿名VSFTP用户登录
查看>>
Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
查看>>
Oracle 10g
查看>>
Mahout数据承载
查看>>
Linux:alias 起别名
查看>>
Spring Boot 中使用 RocketMQ
查看>>
我的友情链接
查看>>
day01:shell基础(shell基础、alias及重定向)
查看>>
CockroachDB搭建及简单性能测试情况
查看>>
sitemesh3 源码分析
查看>>
centos7.2部署vnc服务记录
查看>>
Web的项目管理工具Redmine(对比选择最佳开源项目)- Codendi,dotProject,Launchpad,Project.net,Redmine...
查看>>
Linux基础(十)--bash脚本简介
查看>>
Cocos2d-x Android开发环境的配置
查看>>
NTP
查看>>
扩展根目录空间
查看>>
簡單收所有經過網卡的包 promiscuous mode GNU Linux
查看>>
高性能高并发--分布式,集群
查看>>