理論:
**塊:
#include
#include
#include
#include
//圖的鄰接表型別定義
typedef
char vertextype[4]
;typedef
int infoptr;
typedef
int vrtype;
#define statcksize 100
#define false 0
#define true 1
#define maxsize 50
//最大頂點個數
typedef
enum
graphkind;
//圖的型別:有向圖、有向網、無向圖和無向網
//建立全域性變數,儲存邊的最早開始時間
vrtype ve[maxsize]
;//建立全域性變數,儲存邊的最晚開始時間
vrtype vl[maxsize]
;typedef
struct arcnode arcnode;
typedef
struct vnodevnode,adjlist[maxsize]
;typedef
struct
adjgraph;
typedef
int datatype;
//定義順序棧
typedef
struct
seqstack;
//函式宣告
intlocatevertex
(adjgraph g,vertextype v)
;void
creategraph
(adjgraph *g)
;void
displaygraph
(adjgraph g)
;void
destroygraph
(adjgraph *g)
;//順序棧初始化
void
initstack
(seqstack *s)
;//判斷棧是否為空
intstackempty
(seqstack s)
;//進棧操作
intpushstack
(seqstack *s,datatype e)
;//出棧操作
intpopstack
(seqstack *s,datatype *e)
;//
void
creategraph
(adjgraph *g)
printf
("請輸入 弧尾 弧頭 權值(以空格作為間隔);\n");
for(k=
0;k>arcnum;k++)(
*g).kind=dn;
}//查詢
intlocatevertex
(adjgraph g,vertextype v)
}return-1
;}//銷毀有向網
void
destroygraph
(adjgraph *g)}(
*g).vexnum=0;
//將頂點的數目為0
(*g)
.arcnum=0;
//將邊的數目為0
}void
displaygraph
(adjgraph g)
printf
("\n%d條邊:\n",2
*g.arcnum)
;for
(i=0
;i)printf
("\n");
}}//順序棧初始化
void
initstack
(seqstack *s)
//判斷棧是否為空
intstackempty
(seqstack s)
else
}//進棧操作
intpushstack
(seqstack *s,datatype e)
else
}//出棧操作
intpopstack
(seqstack *s,datatype *e)
else
}//統計各頂點的入度
void
findindegree
(adjgraph g,
int indegree)
}}//有向網g的拓撲排序。如果圖g沒有迴路,則輸出g的乙個拓撲序列並返回1,否則返回0
inttopologicalsort
(adjgraph g,seqstack *t)
initstack
(t);
//初始化拓撲排序列頂點棧
for(i=
0;i)while(!
stackempty
(s))}if
(count
else
}//輸出 n的關鍵路徑
intcriticatlpath
(adjgraph n)
}for
(i=0
;i)while(!
stackempty
(t))}}
printf
("\n事件的最早發生時間和最晚發生的時間\n i ve[i] vl[i]\n");
for(i=
0;i)printf
("關鍵路徑為:");
for(i=
0;iprintf
("\n");
count=0;
for(j=
0;j}printf
("關鍵活動為:");
//輸出關鍵路徑
for(k=
0;k)printf
("\n");
return1;
}int
main()
效果圖:
拓撲排序,AVO網的判斷
時 限 2000 ms 記憶體限制 5000 k 總時限 3000 ms 描述 以鄰接矩陣給出一張以整數為結點的有向圖,其中0表示不是相鄰結點,1表示兩個結點相連且由當前結點為初始點。利用拓撲排序判斷圖中是否有環,若有輸出yes沒有輸出no 輸入 結點數 鄰接矩陣 輸出 yes no 輸入樣例 3 ...
設計AOV網拓撲排序的演算法
對乙個有向圖構造拓撲序列的過程稱為拓撲排序 不唯一 1 圖的儲存結構 採用鄰接表儲存,在頂點增加乙個入度域 2 棧s儲存所有無前驅的頂點 1.棧s初始化 累加器count初始化 2.掃瞄頂點表,將沒有前驅 入度為0 的頂點壓棧 3.當棧s非空時迴圈 3.1 j 棧頂元素出棧 輸出頂點j count ...
拓撲排序的原理與實現
拓撲排序顧名思義是一種排序演算法,它用於給有向圖排序。有向圖是由一組頂點和一組有方向的邊組成的圖,每條有方向的邊都連線著有序的一對頂點,因此a b代表a可以到達b,並不代表b就能到達a。拓撲排序的結果就是乙個有向圖的頂點序列 或稱為拓撲序列 想要學習 c 程式設計 就需要先學習 計算機導論 想要學習...