#include"stdio.h"
#include"stdlib.h"
#define max_vextex_num 20 //定義頂點的最大值
#define m 20
#define stack_init_size 100 //定義棧的大小 100
#define stackincrement 10 //定義棧的增量 10
#define ok 1
#define error 0
typedef int elemtype; //定義棧頂元素型別
typedef struct arcnode
arcnode; //表結點
typedef struct vnode
vnode,adjlist[max_vextex_num]; //頭結點
typedef struct
algraph;
typedef struct //建棧
sqstack; //順序棧
void initstack(sqstack *s) //初始化棧
s->top=s->base; //空棧之前的指標賦給頭指標
s->stacksize=stack_init_size;//棧的空間設為stack_init_size
}int pop(sqstack *s,elemtype *e) //出棧操作
void push(sqstack *s,elemtype e) //進棧操作,插入元素e為新的棧頂元素
s->top=s->base+s->stacksize;
s->stacksize+=stackincrement;
} *s->top++=e;
}int stackempty(sqstack *s) //判斷棧是否為空
void creatgraph(algraph *g) //構建圖,用鄰接表儲存
for(i=1;i<=g->arcnum;i++) //輸入存在弧的點集合
p=(arcnode *)malloc(sizeof(arcnode));
if(p==null)
p->adjvex=m;
p->nextarc=g->vertices[n].firstarc; //一次插入進鄰接表
g->vertices[n].firstarc=p;
} printf("建立的鄰接表為:\n"); //輸出建立好的鄰接表
for(i=1; i<=g->vexnum; i++) }
void finddegree(algraph g,int indegree) //求入度操作
for(i=1;i<=g.vexnum;i++) }
}void topologicalsort(algraph g) //輸出拓撲排序函式
printf("\n");
for(i=1;i<=g.vexnum;i++) //建0入度頂點棧s
printf("進行拓撲排序輸出順序為:\n");
while(!stackempty(&s)) //棧不空時
}for(i=1;i<=g.vexnum;i++) //輸出各頂點入棧是每一趟的入度情況
j++;
} printf("\n");
if(count
拓撲排序 1
time limit 1000msmemory limit 32768kb64bit io format i64d i64u 有一群人,打桌球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。球賽的規則如下 如果a打敗了b,b又打敗了c,而a與c之間沒有進行過比賽,那麼就認定,a一定能打敗c。如果a打...
1 拓撲排序
一 定義 拓撲排序 對有向無環圖的頂點的一種排序,它使得如果存在一條從vi到vj的路徑,那麼在排序中vj出現在vi的後面。示例 在學習課程圖中,存在有向邊二 aov網 引子 現有乙個工程亟待完成,我們需要製作施工的流程圖,它可以決定哪些子工程必須要先執行,哪些子工程要在某些工程執行後才可以執行。為了...
排課表 拓撲排序 自己寫的拓撲排序方法 1
現在你總共有 n 門課需要選,記為0到n 1。在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,返回你為了學完所有課程所安排的學習順序。可能會有多個正確的順序,你只要返回一種就可以了。如果不可能完成所有...