拓扑排序总结

拓扑排序总结

1.前言

拓扑排序主要的作用是可以用来判断,当前图中是否含有环。其主要的实现思想是,从图中的入度为零的点开始,如果找到,就将这个点从图中删去,并更新与这个点相连的其他点的入度信息,直到全部的点都被删去,或者图中没有入度为零的点,如果是后一种情况,那么证明图中含有环。

2.实现

代码的实现具体如下

#include 
using namespace std;
void Top_sort(int **map,int n)//n为行数,m为列数
{
	int number[105] = { 0 };
	for(int i=1;i<=n;i++)//求出每一个点的入度
	{
		for(int j=1;j<=n;j++)
		{
			if(map[j][i])
			{
				number[i]++;
			}
		}
	}
	int queue[105];//队列得到Top_sort
	int tail = 1;
	int start = 0;
	int count = 0;
	while (1)
	{
		int flag = 0;
		for (int i = 1; i <= n; i++)
		{
			if (number[i] == 0)//找到入度为0的点
			{
				number[i] = -1;
				queue[tail] = i;
				tail++;
				flag = 1;
				for (int j = 1; j <= n; j++)//改变与这个顶点之间有边的点的入度
				{
					if (map[i][j])
					{
						number[j]--;
					}
				}
				count++;
			}
		}
		if(count==n||!flag)//全部点都入栈或者没有一个点有入度时结束
		{
			break;
		}
		//不存在入度为0的点的时候那么证明这个图中有环
	}
}

?实现起来并不麻烦,思路清晰之后其实很简单。

你可能感兴趣的:(数据结构整理)