拓扑排序---(图的领接表实现)

2014-11-23 21:46:38 · 作者: · 浏览: 8
#include
using namespace std;

#define MAX_NODE 30
#define MAX_INFO 10
bool isOutput[MAX_NODE];   //记录该节点有没有输出
struct ListNode
{
	ListNode(){next=NULL;}
	int position;				
	ListNode* next;				
};
struct VertexNode
{
	VertexNode()
	{
		head=NULL;
		inDegree=0;
	}
	int currentPosition;		//当前节点在图存储结构中数组的位置
	int inDegree;				//该节点的入度
	char info[MAX_INFO];		//该节点的信息
	ListNode* head;				//该节点相邻节点的第一个节点
};
struct Graphic
{
	int vertex,edge;
	VertexNode vers[MAX_NODE];
};

void createGraphic(Graphic& graphic)
{
	

	cout<<"请输入节点数和边数: ";
	cin>>graphic.vertex>>graphic.edge;

	cout<<"请输入节点信息:"<>graphic.vers[i].info;
		
	}

	cout<<"请输入边信息:"<>first>>second;
		ListNode* temp=new ListNode;
		temp->position=second;
		temp->next=graphic.vers[first].head;
		graphic.vers[first].head=temp;
		++graphic.vers[second].inDegree;		
	}

	for(i=0;i
"; temp=graphic.vers[i].head; if(!temp) { cout<<"NULL"; } while(temp) { cout<position<<" "; temp=temp->next; } cout<position]) { cout<position].info<<" "; isOutput[head->position]=true; } TopologicalSortForVertex(graphic,head->position); head=head->next; } } void TopologicalSort(Graphic& graphic) { VertexNode* zeroNode=findZeroInDegreeNode(graphic); if(!zeroNode) return; if(!isOutput[zeroNode->currentPosition]) { cout<info<<" "; isOutput[zeroNode->currentPosition]=true; } TopologicalSortForVertex(graphic,zeroNode->currentPosition); TopologicalSort(graphic); } void main() { Graphic myGraphic; createGraphic(myGraphic); printGraphic(myGraphic); TopologicalSort(myGraphic); }