设为首页 加入收藏

TOP

拓扑排序---(图的领接表实现)
2014-11-23 21:46:38 来源: 作者: 【 】 浏览:7
Tags:拓扑 排序 --- 实现
#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);
}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 2828 Buy Tickets 下一篇UVA - 11464 Even Parity

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·一篇说人话的文章, (2025-12-27 07:50:09)
·Python Web框架哪家 (2025-12-27 07:50:06)
·基于Python的数据分 (2025-12-27 07:50:03)
·深入理解 Java 集合 (2025-12-27 07:22:48)
·Java集合框架全面解 (2025-12-27 07:22:45)