/*adjlist.h有向無環圖的鄰接表儲存結構*/
#include#include#include#define max_vertex_num 10
#define max_name 10
typedef char vertexdata[max_name];
typedef struct arcnode
arcnode;
typedef struct vertexnode
vertexnode;
typedef struct
adjlist;
void visit(char *s)
int locatevertex(adjlist *g,vertexdata u)
void creategraph(adjlist *g)
for(i=0;iarcnum;i++) }
}
/*stack.h棧的儲存結構*/
#define max_stack_num max_vertex_num+1
typedef struct
stack;
void initstack(stack *s)
bool stackempty(stack *s)
bool isfull(stack *s)
bool push(stack *s,int in)
s->stack[s->top]=in;
return true;
}bool pop(stack *s,int *out)
*out=s->stack[s->top--];
return true;
}
/*main.c驅動程式*/
#include"adjlist.h"
#include"stack.h"
int indegree[max_vertex_num];
int ve[max_vertex_num]; //各頂點事件的最早發生時間
int vl[max_vertex_num]; //各頂點事件的最遲發生時間
void findindegree(adjlist *g)
}bool topologicalorder(adjlist *g,stack *t)
} if(countvertexnum) //該有向圖有迴路
return false;
return true;
}bool criticalpath(adjlist *g)
for(i=0;ivertexnum;i++)//初始化頂點事件 最遲發生時間
vl[i]=ve[g->vertexnum-1];
/*接下來按拓撲逆序求個頂點的vl值*/
while(!stackempty(&t)) }
/*到此處為止已經求出了給個頂點的ve和vl值了最後要求關鍵活動只要
比較弧的ee和el值如果相等就代表該弧所代表的就是關鍵活動*/
printf("該工程的關鍵活動是:\n");
for(i=0;ivertexnum;i++)
for(p=g->vertex[i].firstarc;p;p=p->nextarc)
return true;
}int main(void)
拓撲排序及其應用
拓撲排序及其應用 1.拓撲排序的介紹 對於乙個有向無環圖g v,e 來說,其拓撲排序是g中所有結點的一種線性次序。該次序滿足如下條件 如果圖g包含邊 u,v 則結點u在拓撲排序中處於結點v的前面 如果圖g包含環路,則不可能排出乙個線性次序。可以將圖的拓撲排序看作是將圖的所有結點在一條水平線上排開,圖...
拓撲排序簡介及其應用
拓撲排序是資料結構圖論中的一點內容。拓撲排序主要用來解決有向圖中的依賴解析 dependency resolution 問題。這裡主要寫幾個模板 題目鏈結 include include using namespace std const int m 505 int raod m m p m int...
拓撲排序的應用(zoj3780
題意就是塗點,每行每列只能塗一次,每一次能夠塗滿每行或者每一列。因題目要求字典序,把每列看做1 n來塗,每列看做n 1 2 n。然後按照拓撲排序建圖,就是一般拓撲排序的應用 include include include include include include include include...