以邻接表为存储结构的无向图的广度优先生成树,以广度优先遍历的思想为主线。下面是代码:
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
const int MAX_VERTEX_NUM=20; //顶点最大值
bool visited[20];//用于遍历时辅助使用
bool searched[20];//用于建树时辅助使用
//循环队列模版
template<class T>
class My_queue;
template<class T>
class Node
{
private:
T data;
Node<T> *next;
public:
Node()
{
next=0;
}
Node(T d)
{
data=d;
next=0;
}
friend My_queue<T>;
};
template<class T>
class My_queue
{
private:
Node<T> *tail;
public:
My_queue()
{
tail=new Node<T>();
tail->next=tail;
}
bool empty()
{
return (tail->next==tail);
}
void push(T d)
{
Node<T> *p=new Node<T>(d);
p->next=tail->next;
tail->next=p;
tail=p;
}
T front()
{
if(empty())
{
cout<<"queue is empty!"<<endl;
exit(0);
}
Node<T> *p=tail->next;
T data=p->next->data;
return data;
}
void pop()
{
Node<T> *p=tail->next;
Node<T> *q=p->next;
p->next=q->next;
if(q==tail)
tail=p;
delete q;
}
};
class ALGraph;
class CS_Tree;
//树结点
class CSnode
{
string data;
CSnode *firstchild;
CSnode *nextsibling;
friend class CS_Tree;
friend class ALGraph;
};
//树类定义
class CS_Tree
{
public:
void PreRoot_Traverse(CSn