输出拓扑排序的所有可能结果(题目来源:算法分析与设计及其案例教程第五章课后习题第五题)

本文介绍了如何使用C++实现拓扑排序,重点在于输出所有可能的拓扑排序结果,并按字典序排列。作者分享了经过改写的代码,灵感来源于优快云博主focus_best的一篇文章,解决了仅能输出一种拓扑排序结果的问题。同时,还附带了之前只能输出一种可能的拓扑排序的代码片段。

这是我在csdn 的第②篇博客
该篇为C++代码
原题问的是实现拓扑排序的方法,但答案给除了所有的拓扑排序的可能。
原题答案
看到答案这么写我就在想如何才能输出所有拓扑排序的结果?,但我一开始只能写出输出一种可能的拓扑排序结果的代码,经过一天的查询资料后在优快云发现POJ 1270 Following Orders(拓扑排序:输出所有可能)这篇文章给了我很大帮助,通过改写(我是菜鸡,勉强改改)该博主的ac后的代码,可以输出所有的拓扑排序结果且按字典序排列。在这里感谢优快云博主focus_best
我的题目的图片:(要求输出该有向无环图中的所有的拓扑排序的结果)
在这里插入图片描述
改写后的代码(有些细节没有照顾到,可能会出现一些没有用到的变量,时间紧迫哟) 编辑器:Code::Blocks 16.01

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=30;
const int maxm=500;
int n;//有效字母数
int vis[maxn];//是否访问
int ans[maxn];//答案数组
int cnt;//当前dfs计数
bool mark[maxn];//标记当前字母出现在变量中
int gragh[7][7] = {
		{0,1,1,0,0,0,0},//a
		{0,0,0,0,1,0,1},//b
		{0,0,0,0,0,1,0},//c
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值