邻接表+拓扑排序,输出的是无向图的拓扑有序序列。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<stack>
#define MAX_VERTEX_NUM 100
using namespace std;
int indegree[MAX_VERTEX_NUM];
stack<int>s;
typedef struct ArcNode{
int adjvex;//该边的另一个顶点的位置
struct ArcNode *nextarc; //指向下一条边
}ArcNode;
typedef struct VNode{
int data;//顶点的值
ArcNode *firstarc;//指向第一条依附该顶点的边的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList vertices;//顶点数组
int vexnum,arcnum;
}ALGraph;
int LocateVex(ALGraph G,int v){//定位函数
for(int i=0;i<G.vexnum;i++){
if(v==G.vertices[i].data)return i;
}
}
void CreateDG(ALGraph &G){
ArcNode *p;
int i,j,k,v1,v2;
printf("分别输入顶点个数和边的数目:\n");
scanf("%d%d",&G.vexnum,&G.arcnum);
printf("分别输入各个顶点值:\n");
for(i=0;i<G.vexnum;i++){
scanf(