資料結構之拓撲排序

2021-06-27 23:23:23 字數 2254 閱讀 2218

乙個簡單的求拓撲排序思路是:先找出任意乙個沒有入邊的頂點。然後列印出該頂點,並將它和它的邊一起從圖中刪除。然後,我們對圖的其餘部分採用同樣的方法處理。相應的我們可以定義乙個indegree(入度陣列)儲存所有頂點的入度。具體實現如下(鄰接表):

#define _crt_secure_no_warnings

#include#include#include#define max_szie 100

#define max 0x7fffffff

typedef struct node

vertex, *pvertex;

typedef struct graph

graph;

// 新增鄰接表的結點

pvertex addnewnode(int verinfo)

// 輸入圖的頂點數,和邊數

void inputvertexnumandedgenum(graph *g)

// 輸入頂點

void inputedge(graph *g)

p->pnext = addnewnode(--t2); }}

// 建立圖

void creategraph(graph *g)

// 顯示圖

void displaygraph(graph *g)

printf("\n"); }}

// 圖的遍歷

void bfs(graph *g, int start)

; pvertex queue[max_szie] = ;

int rear = 0, front = 0;

queue[rear++] = g->list[start];

vis[g->list[start]->verinfo] = 1;

while (front != rear)

temp = temp->pnext;

} }}// 初始化入度陣列

int *initindegree(graph *g,int n)

// 獲得入度陣列

void getindegree(graph *g,int *indegree)

}} indegree[i] = count;

} printf("各個頂點的入度為\n");

for (i = 0; i < g->vertexnum; i++)

printf("%d ", indegree[i]);

printf("\n");

}// 找到入度陣列中為0的頂點,並判斷圖是否有環

int findnewvertexofindegreezero(int *indegree,int n)

} if (1 == flag)

return i;

return -1;

}// 拓撲排序

void topsort(graph *g, int *indegree)

topnum[i] = v + 1;

p = g->list[v]->pnext;

while (p != null)

}printf("圖的乙個拓撲排序結果為\n");

for (i = 0; i < n; i++)

printf("%d ", topnum[i]);

free(topnum);

}void reversal(int *arr, int n1, int n2)

}// 拓撲排序用到佇列

void topsortbyqueue(graph *g, int *indegree)

while (front != rear)

p = p->pnext;

} // 在這個地方錯了好久,最後才發現,照上面的輸入v7先入隊,v3後入隊,然後v7出隊,v3出隊

// 但正確的出隊順序是v3,v7

if (temp > 1)

}if (count != n)

printf("\n圖的乙個拓撲排序結果為\n");

資料結構之拓撲排序

拓撲排序 topological order 是指,將乙個有向無環圖 directed acyclic graph簡稱dag 進行排序進而得到乙個有序的線性序列。這樣說,可能理解起來比較抽象。下面通過簡單的例子進行說明!例如,乙個專案包括a b c d四個子部分來完成,並且a依賴於b和d,c依賴於d...

資料結構之拓撲排序

感覺重點就是鄰接表的建立和tp toposort 函式中的乙個變數 的變化很奇妙,相當於是乙個靜態指標的用法。include include include include include include include include include define inf 0x3f3f3f3f d...

資料結構之拓撲排序

一 什麼是拓撲排序 在圖論中,拓撲排序 topological sorting 是乙個有向無環圖 dag,directed acyclic graph 的所有頂點的線性序列。且該序列必須滿足下面兩個條件 每個頂點出現且只出現一次。若存在一條從頂點 a 到頂點 b 的路徑,那麼在序列中頂點 a 出現在...