接著上一次的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 拓撲排...