拓撲排序 C實現

2021-05-27 23:47:53 字數 1133 閱讀 3168

接著上一次的c++實現,這次用c語言寫一遍。主要是多了棧stack的實現部分。

參考了《資料結構》教材。

**如下:

#include #include #include #include //-----圖的鄰接表儲存表示

#define max_vertex_num 20

typedef struct arcnode

}arcnode;

typedef struct vnode

}vnode,adjlist[max_vertex_num];

typedef structalgraph;

//------ 棧的 順序儲存表示-------

#define stack_init_size 20 //儲存空間初始分配量

#define stackincrement 10 //儲存空間分配增量

typedef structsqstack;

bool sqstack::initstack() //構造乙個空棧

int sqstack::gettop() //若棧不空,返回棧頂元素

bool sqstack::push(int i) //插入元素i為新的棧頂元素

*top = i;

top++;

return true;

}bool sqstack::pop() //若棧不空,刪除棧頂元素

bool sqstack::empty() //判斷棧是否為空

bool topologicalsort(algraph g,int *indegree)

//若入度減為0,則入棧

} }if(countadjvex = e;

p->nextarc = g.vertices[b].firstarc;

g.vertices[b].firstarc = p;

indegree[e]++;

printf("\n");

} if(topologicalsort(g,indegree))printf("正常完成!\n");

else printf("該有向圖有迴路!\n");

fclose(fin);

return 0;

}

拓撲排序C 實現

aov activity on vertex network 網 活動在頂點上的網,是一種頂點表示活動,邊表示先後順序的有向無環圖,可以用來表示產品生產流等。拓撲排序 將有向無環圖的所有頂點排列成乙個序列,序列中的頂點滿若一對頂點u和v存在路徑u v,則u一定出現再v之前。略 有時間再補充吧 步驟 ...

拓撲排序(C語言實現)

拓撲排序可以將乙個有向無環圖轉換為乙個線性序列。它也是判定乙個有向圖是否是無環的方法之一。如何進行拓撲排序,方法如下 1 從有向圖中選取乙個 沒有前驅 入度為 0 的 頂點,並輸出之 2 從有向圖中刪去此頂點以及所有以它為尾的 弧 弧頭頂點的入度減 1 重複上述兩步,直至圖空,或者圖不空但找不到 無...

C 語言實現 拓撲排序

1 拓撲排序的概念 對乙個1.在有向圖中選乙個沒有前驅的頂點並且輸出 2.從圖中刪除該頂點和所有以它為尾的弧 白話就是 刪除所有和它有關的邊 3.重複上述兩步,直至所有頂點輸出,或者當前圖中不存在無前驅的頂點為止,後者代表我們的有向圖是有環的,因此,也可以通過拓撲排序來判斷乙個圖是否有環。3 拓撲排...