⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cayley 定理 .cpp

📁 Cayley 定理的实现 stl编写 树与序列的一一对应关系
💻 CPP
字号:
/************************************************************************/
/*                       Cayley 定理                                    */
/************************************************************************/
#include <iostream>
#include <map>
#include <algorithm>
#include <list>
#include <utility>
#include <vector>
using namespace std;

typedef map<int ,list<int>* >::value_type value_type; 

class Cayley
{
public:
	Cayley():x(x),y(y),k(10000),num_map(0),num_list(0),map_size(map_size){}
	~Cayley(){delete num_list;delete num_map;}
	void Creattree();
	void Deletenode();
private:	
	map<int,list<int>*> *num_map;
	list<int> * num_list;
	int x,y,k,map_size;
};
void main()
{
	Cayley q;
	q.Creattree();
	q.Deletenode();
}

void Cayley::Creattree()
{
	num_map = new map<int,list<int>* >;                       
	while (1)
	{
		cout<<"Enter node ,-1 over:"<<endl;
		cin>>x;
		if (x==-1)
		{
			break;
		}
		num_list =new list<int>;
		num_map->insert(value_type(x,num_list));
	}
			
		map<int,list<int>* >::iterator it = num_map->begin(),end_it = num_map->end();

			while (it!=end_it)
			{
				while (1)
				{
					cout<<"Enter("<<it->first<<"):Child,0 over"<<endl;	
			        cin>>y;	
			        if (y==0)
					{
				        break;
					}	
				    it->second->push_back(y);
				}
				it++;	
			}	
}
	
void Cayley::Deletenode()
{
	map_size = num_map->size();
	vector <int> * svec = new vector<int>;              //b
	ostream_iterator<int> screen(cout," ");

  while(map_size>2)
  {
	map<int,list<int>* >::iterator it = num_map->begin(),end_it = num_map->end();
	while (it!=end_it)
	{
		for (int i=1;i<=map_size;i++)
		{
			if (it->second->empty())
			{
				if (it->first<k)
				{
				    k=it->first;				
				}
			}			
		}
		it++;
	}
	cout<<"a="<<k<<endl;
	
	num_map->erase(k);
	map_size--;

	it = num_map->begin(),end_it = num_map->end();
	
	while (it!=end_it)
	{
		list<int> * edge_list = it->second;
		list<int>::iterator list_it = edge_list->begin(),list_end_it = edge_list->end();
		
		for (;list_it!=list_end_it;list_it++)
		{
			if (*list_it==k)
			{
				svec->push_back(it->first);
				edge_list->remove(*list_it);
				break;
			}
		}	
		it++;
	}
       k=10000;
  }

  cout<<"b序列为:"<<endl;
  copy(svec->begin(),svec->end(),screen);
  cout<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -