zoukankan      html  css  js  c++  java
  • hdu1251

    并查集告一段落啦,先放下吧,今晚再做一下总结吧

    之后转入字典树的学习

    这道题目是比较基础的而且明显的字典树

    慢慢来吧

    题意比较明显,查找以某一个串为前缀的单词的数目,字典树还有一个名称,就是前缀树,所以就很明显了吧

    不过下面的代码用的是比较朴素的方法,root->next[],开的内存太大了,不过速度也相对快了

    root->cnt记录的是以从根节点到达该节点组成的串为前缀的单词的个数

    此题涉及到字典树的俩个基本操作,插入还有查找,代码很容易理解

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    typedef struct node
    {
    	int cnt;
    	struct node *next[26];
    }*tree,t;
    tree root;
    void insert(char *str)
    {
    	tree p=root,newnode;
    	for(;*str!='\0';str++)
    	{
    		if(p->next[*str-'a']!=NULL)
    		{
    			p=p->next[*str-'a'];
    			p->cnt++;
    		}
    		else 
    		{
    			newnode=(tree)malloc(sizeof(t));
    		  for(int i=0;i<26;i++)
    		    newnode->next[i]=NULL;
    	      newnode->cnt=1;
    		  p->next[*str-'a']=newnode;
    		  p=newnode;
    		}
    	}
    }
    int find(char *str)
    {
    	tree p=root;
    	for(;*str!='\0';str++)
    	{
    		if(p->next[*str-'a']!=NULL)
    		p=p->next[*str-'a'];
    		else return 0;
    	}
    	return p->cnt;
    }
    int main()
    {
    	char str[16];
    	root=(tree)malloc(sizeof(t));
    	for(int i=0;i<26;i++)
    		root->next[i]=NULL;
    	root->cnt=0;//根节点初始化当然为0,不包含任何字母
    	while(gets(str))
    	{
    		if(strcmp(str,"")==0)
    			break;
    		insert(str);
    	}
    	while(gets(str))
    	{
    		//if(strcmp(str,"")==0)
    			//break;
    		printf("%d\n",find(str));
    	}
    	return 0;
    }
    
  • 相关阅读:
    SSH 密钥类型的的选择
    VMware 默认的虚拟交换机关系与VMnet设置
    路由器端口映射不生效的解决方法
    优先使用对象组合,而不是类继承
    权限管理系统之软件注册模块
    如何正确安装phpDocumentor
    IE下cookie跨域问题
    Linux下Apache无法解析.php文件
    用 memcache 来存储 session
    windows7 下 phpunit 安装
  • 原文地址:https://www.cnblogs.com/nanke/p/2044316.html
Copyright © 2011-2022 走看看