tire樹~!

 

程序代碼:

#include<iostream>
#include<string>
using namespace std;
#define maxn 3300000 
struct Node
{
	int nxt[26];
	int cnt[26];
};
Node node[maxn];
int cnt,n;
void insert(char src[])// 插入操作 
{   int len = strlen(src),r = 1,i,j,pos;
	for(j=0;j<len;j++)
	{   pos = src[j]-'a';
		if(node[r].nxt[pos]==-1)
		{   node[r].nxt[pos] = ++cnt;
			for(i=0;i<26;i++)
			{   node[cnt].nxt[i] = -1;
				node[cnt].cnt[i] = 0;
                }
			if(j==len-1)
				node[r].cnt[pos]++;
			r = cnt;}
		   else
                         {     
                              if(j==len-1)
				node[r].cnt[pos]++;
				r = node[r].nxt[pos];
                }
	}
}
bool dele(char src[])// 刪除操作  
{
	int r = 1,len = strlen(src),i,pos;
	for(i=0;i<len;i++)
	{ 	pos = src[i]-'a';
		if(node[r].nxt[pos] != -1)
		{ 	if(i==len-1&&node[r].cnt[pos] > 0)
			{	node[r].cnt[pos] = 0; 
			         return true;} 
			         r = node[r].nxt[pos];
                           }
		        else  
                               break; 
	}
	return false; 
} 
void travel(int r,char src[],int pos)// 遍歷操作 
{
	if(r == -1)return ; 
	int i,j;
	for(i=0;i<26;i++)
	{
		if(node[r].nxt[i] != -1)
		{
			src[pos] = i + 'a';
			if(node[r].cnt[i] > 0)
		                printf("%s\n",src); 
			travel(node[r].nxt[i],src,pos+1); 
		}
	}
	src[pos] = '\0'; 
}
bool search(char src[])// 查找操作 
{
	int r = 1,len = strlen(src),i,pos;
	for(i=0;i<len;i++)
	{ 
		pos = src[i]-'a';
		if(node[r].nxt[pos] != -1)
		{ 
			if(i==len-1&&node[r].cnt[pos] > 0)
                                 return true;
		r = node[r].nxt[pos]; 
		}
		else 
                      break; 
	}
	return false; 
} 
int main()
{
	cnt = 1;
	for(int i=0;i<26;i++)
	{
		node[1].nxt[i] = -1;
		node[1].cnt[i] = 0;
	}
	char tname[35];
	n = 0;
	while(gets(tname)!=NULL)
	{
		if(tname[0]=='\0')
                       break;
		insert(tname);
		n++;
	}	
	if(search("aa"))
             printf("yes\n");
	else 
             printf("no\n");	
	if(search("aaa"))
              printf("yes\n");
	else 
              printf("no\n");
	dele("aaa");
	
	if(search("aaa"))
              printf("yes\n");
	else 
              printf("no\n");
	memset(tname,'\0',sizeof(tname));
	travel(1,tname,0);
	return 0;
}


PS:鑑於這兩天挑燈夜戰,都快垮了。。。吃飯沒胃口,硬的東西吃不下。。。55555。。。只要打起精神就會好吧。。。親,看書去吧~!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章