C++实现拓扑排序(vector模拟邻接表存储,栈实现)

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++实现拓扑排序(vector模拟邻接表存储,栈实现)相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

代码如下:

#include<iostream>
#include <vector>
#include <string>
#include <stack>
using namespace std;
const int N = 10010;

int in[N];
vector<int>v[N];
vector<int>printElem;

int main()
{
	int n, m;
	while (cin >> n >> m, n, m)
	{
		memset(in, 0, sizeof(in));
		for (int i = 0; i < n; i++) v[i].clear();
		for (int i = 0; i < m; i++)
		{
			int x, y;
			cin >> x >> y;
			v[x].push_back(y);
			in[y]++;
		}
		stack<int>s;
		for (int i = 0; i < n; i++)
		{
			if (!in[i])s.push(i);
		}

		while (!s.empty())
		{
			int xx = s.top();
			printElem.push_back(xx);//也可以直接输出,不用存进这个vector容器也行
			n--;
			s.pop();
			for (int i = 0; i < v[xx].size(); i++)
			{
				int yy = v[xx][i];
				in[yy]--;
				if (!in[yy])
				{
					s.push(yy);
				}
			}
		}
		if (!n)
		{
			for (const auto &item : printElem) cout << item << " ";
			cout << endl;
		}
		else cout << "no" << endl;
	}
	return 0;
}

测试结果:

在这里插入图片描述

以上是关于C++实现拓扑排序(vector模拟邻接表存储,栈实现)的主要内容,如果未能解决你的问题,请参考以下文章

拓扑排序

拓扑排序

拓扑排序

基于邻接表的拓扑排序实现

拓扑排序,判断有向图中是否有环

图论基础——邻接链表存图+拓扑排序