拓撲排序的應用

2021-06-19 18:18:03 字數 1737 閱讀 1359

/*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...