这是我在准备武汉理工初试时 反复练习几次的题,解决的也是最简单的输出一条拓扑排序序列。也曾考过初试,我有个同学在公司笔试时也考过。 是图编程难度算不大的题
问题描述:对于一个有n个节点的有向图,判断其有无回路,如果没有请输出一条拓扑排序路径。采用邻接链表存储
输入采用文件格式,如下
//建立有向图的文件输入格式为
//顶点个数n
//顶点0出度k1 m1 m2 … mk
//…
//顶点n出度kn s1 s2 … skn
//例如
//4 代表顶点个数
//0 代表顶点0出度为0
//1 2 代表顶点1出度为1 指向2顶点
//3 0 1 2 代表顶点2出度为3 指向0,1,2顶点
//0
PS:因为我刚写博客不久,这个编辑器确实用不习惯,以后有时间会做的更加简洁好看。
上代码:
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
ifstream input;
int *InDegree; //所有顶点入度
typedef struct VNode //顶点
{
int vexID; //顶点编号
int outDegree; //出度
struct ArcNode *first;
}VNode;
typedef struct AlGraph
{
int vexnum; //顶点个数
VNode *vertices; //顶点表
}AlGraph;
typedef struct ArcNode //边表节点
{
int vexID; //顶点标号
struct ArcNode *next;
}ArcNode;//边表