zoukankan      html  css  js  c++  java
  • Trie树:POJ2001

    这是一道最简单的trie树的题

    有趣的是这道题的测试用例无法在VS上调试,只能在框框里不断提交测试了,哈哈

    最基本的Trie树,插入和查找操作没什么好说的

    注意节点添加一个count变量作为附加条件,记录该字母这这个位置出现的次数,还有几处需要注意的逻辑问题,在注释中标出了

    直接上代码了:

    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <stdio.h>
    using namespace std;
    char strList[1005][25];
    struct node
    {
        int count;
        node* childs[26];
        node(){
            count = 0;
            int i;
            for(i=0;i<26;i++){
                childs[i] = NULL;
            }
        }
    };
    
    node* root = new node;
    node* currentNode;
    void insert(char *str)
    {
        int i=0;
        currentNode = root;
        
        for(i=0;i<strlen(str);i++){
            int index= str[i] - 'a';
            if(currentNode->childs[index]!=NULL){
                currentNode = currentNode->childs[index];
                ++(currentNode->count);
            }else{
                currentNode->childs[index] = new node;
                currentNode = currentNode->childs[index];
                currentNode->count = 1;
            }
        }    
    }
    
    void search(char *str)
    {
        currentNode = root;
        int i;
        char res[23];
        for(i=0;i<strlen(str);i++){
            int index = str[i] - 'a';
            //if(currentNode->childs[index]!=NULL)//没有必要判断,因为根据题意,此时一定是有的
            currentNode = currentNode->childs[index];
            res[i] = str[i];
            res[i+1]='';//必须在这里加入'',因为如果没有找到,则会跳出,如果在下面的判断中加‘’会导致最后没有结尾的''.
            if(currentNode->count == 1){break;}//输出+return 或者 直接break
        }
        printf("%s %s
    ",str,res);
        return;
    }
    int main()
    {
        int i,t=0;
        while(scanf("%s",strList[t])!=EOF)
        {
            insert(strList[t]);
            t++;
        }
        for (i = 0; i < t; ++i)
        {
            search(strList[i]);
        }
        return 0;
    }
  • 相关阅读:
    Orcad CIS怎么批量修改字体大小
    DCDC电路电感和电容啸叫的原因
    D类功放基础简介
    U盘EFI分区删不掉怎么办
    EMI-CLK信号串电阻并电容
    Buck工作原理分析,连续模式,断续模式
    Hyperlynx仿真学习
    Audio简介
    ORCAD常见DRC错误
    39:记负均正
  • 原文地址:https://www.cnblogs.com/yueyanglou/p/5365280.html
Copyright © 2011-2022 走看看