指针版

#include<iostream>
using namespace std;
#define max 26
struct node//初始tire树
{
 bool boo;//判断是否是字符串最低端
 char aa[15];//将b字符串最低端 存a字符串
 node *next[max];
};
node *root;
void trie()//初始!!!!
{
 root=new node;
 root->boo=0;
 for(int i=0;i<max;i++)
 root->next[i]=NULL;
}
void insert(char a[],char b[])
{
 node *p=root,*t;//将p指向当前节点,p来开辟内存
 int len=strlen(b);//
 for(int i=0;i<len;i++)//建立b字符串这么深得树
 {
  if(p->next[b[i]-'a']==NULL)
  {
   t=new node;
   for(int j=0;j<max;j++)
   t->next[j]=NULL;
   t->boo=0;
   p->next[b[i]-'a']=t;
  }
  p=p->next[b[i]-'a'];
 }
 p->boo=1;//树低用boo标记
 memcpy(p->aa,a,sizeof(p->aa));//把a字符串存入树低
}
void search(char c[])
{
 int len=strlen(c);
 node *p=root;
 for(int i=0;i<len;i++)//按树查找,如果到了树低boo值为1,就将字符aa输出
 {
  if(p->next[c[i]-'a']!=NULL)
  p=p->next[c[i]-'a'];
  else
  {
   printf("eh\n");
   return ;
  }
 }
 if(p->boo==1)
 printf("%s\n",p->aa);
 else
 printf("eh\n");
}
  
int main()
{
 
 char a[15],b[15],c[15];
 trie();
 while(scanf("%s",a)&&getchar()==' ')//这个格式真让人纠结
    {
        scanf("%s",b);
        insert(a,b);
    }
 do
 {
  search(a);
 }
 while(scanf("%s",a)!=EOF);
 return 0;
}
 
数组版

#include<stdio.h>
#include<string.h>
struct trie
{
    int boo;
    char node [15];
    int son[27];
}tree[150010];
int num;
void insert(char a[],char b[])
{
    int now=0;
    for(int i=0;i<strlen(b);i++)
    {
        if(tree[now].son[b[i]-'a']==-1)
        {
            num++;
            for(int t=0;t<26;t++)
                tree[num].son[t]=-1;
            tree[num].boo=0;
            tree[now].son[b[i]-'a']=num;/*i wrote the son as 'A' at the first time*/
        }
        now=tree[now].son[b[i]-'a'];
    }
    memcpy(tree[now].node,a,sizeof(tree[now].node));
    tree[now].boo=1;
}
int find(char temp[])
{
    int now=0;
    for(int i=0;i<strlen(temp);i++)
    {
        now=tree[now].son[temp[i]-'a'];
        if(now==-1)
            return 0;
    }
    if(tree[now].boo)
    {
        printf("%s\n",tree[now].node);
        return 1;
    }
    return 0;   
}
int main()
{
    for(int i=0;i<26;i++)
        tree[0].son[i]=-1;  
    char a[15],b[15];
    while(scanf("%s",a)&&getchar()==' ')
    {
        scanf("%s",b);
        insert(a,b);
    }
    do
    {
        if(find(a)==0)
        printf("eh\n");
    }
    while(scanf("%s",a)!=EOF);
        return 0;
}

poj 2503 Babelfish trie树!!!!指针版和数组版 基础相关推荐

  1. poj - 2503 Babelfish

    简单字典树. 1 #include <stdio.h> 2 #include <string.h> 3 const int N = 200000; 4 int nxt[N][2 ...

  2. Poj 2503 Babelfish(Map操作)

    一.Description You have just moved from Waterloo to a big city. The people here speak an incomprehens ...

  3. [POJ 2503] Babelfish【二分查找】

    题目大意 给你一个词典,每行有两个字符串x,y,表示y翻译成x. 一行空行隔开. 给你一些单词y,问你翻译后的x,如果词典里没有,那么就输出"eh" 解题报告 C++调map,还可 ...

  4. Trie树kmpAC自动机后缀数组Manacher

    Trie 计数+Trie,读清题意很重要 https://vjudge.net/problem/UVALive-5913 kmp AC自动机 模板:https://vjudge.net/problem ...

  5. 数据结构-----基于双数组的Trie树

    Trie树简介 Trie树也称字典树,在字符串的查找中优势比较明显,适用于在海量数据中查找某个数据.因为Trie树的查找时间和数据总量没有关系,只和要查找的数据长度有关.比如搜索引擎中热度词语的统计. ...

  6. 双数组trie树详解

    目录 双数组trie树的构建 构建base array 构建check array 双数组trie树的查询 双数组trie树的构建 NLP中trie树常用于做快速查询,但普通的trie树由于要保存大量 ...

  7. poj 2503 Trie树

    典型的Trie树, 算是复习一下字符串吧, 就是输入有点恶心,代码如下: #include <cstdio> #include <cstring> #include <a ...

  8. POJ 2418 Hardwood Species(trie 树)

    题目链接 开始想用map的,字典序不会搞,还是老老实实的用trie树把.好久没写了,忘得差不多了. 1 #include <iostream> 2 #include <cstdio& ...

  9. poj 2945 Find the Clones 用trie树实现

    /*原来动态构树是这么费时间的...20000个单词最长为20个的题,跑到了1688MS,题目: 题目大概是说找出相同的字符串并且统计个数.分析: 因为昨天刚学完trie树,现在练了几道,有点感觉了, ...

  10. SZUACM集训字符串基础总结: 字符串最小表示 ,KMP, EXKMP, Manracher, Trie树,字符串的hash; 附带一写常见的运用技巧,邝斌大佬的板子和例题[持续更新]

    第一部分 字符串的匹配<-------->KMP 模式匹配:子串的定位运算称为串的模式匹配或串匹配. 假设有两个串S,T,设S为主串,也称正文串,T为子串,也称为模式,在主串S中查找与模式 ...

最新文章

  1. 完全命令行.NET开发
  2. nginx+keepalived双机热备
  3. 各个大厂的机器学习平台概述
  4. oracle mssql交换数据库,Database link 连接oracle MSSql 实现逻辑数据互导
  5. Jzoj4840 小W砍大树
  6. 【译】来看看WebWindow,一个跨平台的.NET Core webview 库
  7. 一起学习C语言:初步进入编程世界(二)
  8. CakePHP中文手册【翻译】
  9. 为您的IIS6下的网站配置Rewrite伪静态组件
  10. 计算机专业和制药工程,制药工程本科专业介绍
  11. 服务器监视Zabbix 5.0 - Window Agent安装
  12. 基于stm32单片机的电梯控制系统
  13. 面试题:ES和Solr的区别是什么?
  14. abi-compliance-checker 理解
  15. Linux命令之显示日期时间date
  16. DNN与推荐两大门派,一念神魔,功不唐捐
  17. 网络协议学习笔记 · 22
  18. 51单片机wifi物联网的浇花控制系统设计
  19. Python基础知识点
  20. 前端----html---第一天

热门文章

  1. SecureCRT中文显示乱码的解决方法
  2. EasyUI-在行内进行表格的增删改操作
  3. 移植 Qt4.8.5到Tiny210
  4. 如何编程访问infopath字段
  5. 获取GridView的BoundField值
  6. 费马小定理与欧拉公式
  7. 单词计数 soj1076
  8. Arcade扩展音色库:Output Arcade Brain Waves Library Content
  9. 在iMac上如何轻松去掉程序坞中最近打开过的应用--小技巧
  10. LUT Gallery for mac插件不能用要怎么办呢?教程来了,快来看看吧