拓撲排序

//拓撲排序算法結構代碼
typedef struct EdgeNode  //邊表結點
{
int adjvex;//鄰接點
int weight;//權值
struct EdgeNode *next;//下一個結點
};


typedef struct VertexNode //頂點表結點
{
int in;//頂點入度
int data;//頂點存儲的信息
EdgeNode *firstedge;//邊表的頭指針
}VertexNode,AdjList[MAXVEX];


typedef struct  
{
AdjList adjlist;
int numVertexes, numEdges;
}graphAdjList,*GraphAdjList;


int TopologicalSort(GraphAdjList GL)
{
EdgeNode *e;
int i, k, gettop;
int top = 0;//用於棧指針下標
int count = 0;//用於統計輸出頂點的個數
int *stack;//建棧存儲入度爲0的頂點
stack = (int*)malloc(GL->numVertexes*sizeof(int));
for ( i = 0; i < GL->numVertexes; i++)
{
if (GL->adjlist[i].in == 0)//如果該頂點的入度爲0,就將這個頂點入棧
stack[++top] = i;
}
while (top != 0)
{
gettop = stack[top--];//出棧
printf("%d ->", GL->adjlist[gettop].data);//打印這個頂點
count++;//統計輸出頂點數
for(e = GL->adjlist[gettop].firstedge; e; e=e->next)//對這個頂點的邊錶鏈接點(這個頂點的弧表)遍歷
{
k = e->adjvex;
if (!(--GL->adjlist[k].in))//將k號頂點的鄰接點的入度減1,再判斷
stack[++top] = k;//如果爲0就入棧,方便下次用來循環輸出
}
}
if (count < GL->numVertexes)//如果count小於頂點數,說明存在環
return ERROR;
else
return OK;
}
發佈了29 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章