拓撲排序(1)

2022-02-23 09:46:35 字數 1635 閱讀 8743

#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 給定課程總量以及它們的先決條件,返回你為了學完所有課程所安排的學習順序。可能會有多個正確的順序,你只要返回一種就可以了。如果不可能完成所有...