c語言之鄰接矩陣 最短路徑 最小生成樹

2021-08-13 20:25:06 字數 1308 閱讀 5057

在對圖的操作過程中,會有非常多靈活的操作,並且乙個簡單的操作會需要定義非常多的基礎結構。下面是乙個具有若干個主要功能的程式:圖的鄰接矩陣表示法,圖的深度優先遍歷,最小生成樹的生成,最小路徑的生成。此程式以鄰接矩陣作為基礎結構。

#include

#define max 20

#define maxint 1000

typedef

enum graphkind;

typedef

struct arccellarccell ,adjmatrix[max][max];

typedef

struct mgraph;

typedef

struct nodeclosedge[max]; //作為輔助陣列,用來儲存普里姆演算法中分量值的變化

int find( char points,int num,char ch)

}void creatudn(mgraph &g)

for(i=0;ifor(j=0;jprintf("請輸入所有的弧的對應的頂點,和權值\n");

for(i=0;iprintf("請輸入此弧對應的頂點和權值\n");

scanf("%c %c %d",&ch1,&ch2,&temp);

g.arcs[find(g.points,g.arcnum ,ch1)][find(g.points,g.arcnum ,ch2)].distance=temp;

}}void dfs(mgraph &g,int mark,int *p)

}}void bianli(mgraph g)

}int locatevex(mgraph g,char u)

}int minimum( closedge fu,int length)

for(i=0;iif(fu[i].lowcost!=0)

return mini;

} void lesttree(mgraph g,char u)

fu[k].ch=u;

fu[k].lowcost=0;

for(i=0;i1;i++)

}for(i=0;iif(fu[i].lowcost>base)

}base=min;

return mini;

} void shortestroute(mgraph g,char u)

fu[k].ch=u;

fu[k].lowcost=0;

for(i=0;i1;i++)

這個程式生成樹和路徑時用的表現手法是用線將倆接點相連,除此之外還有很多可以具體的地方。加油。。。。

最短路徑 鄰接矩陣

思路 先記錄1到所有點的距離 沒有連線記為無窮大 為到達該點的最短路徑長,然後從1開始利用貪心思想依次找出到下乙個連線點的最短距離,然後再找以該點為基準的下乙個距離最近的點,判斷從1先到乙個點再到該點的距離與從1直接到該點距離的大小,若小,則更新dis距離長,否則不更新 若不理解,建議看看簡單易懂 ...

鄰接矩陣 最短路徑演算法

floyd演算法 思路 遍歷計算 i 點 經過 k 點 到 j 點 的最小路徑值 動態規劃思路 缺點 時間複雜度高,不能解決負邊情況 輸入樣例 4 81 2 2 1 3 6 1 4 4 2 3 3 3 1 7 3 4 1 4 1 5 4 3 12 輸出樣例 1 2 2 1 3 5 1 4 4 2 1...

Dijkstra最短路徑演算法鄰接矩陣版

模板參考kuangbin 資料結構方面 includeusing namespace std const int maxn 1010 const int inf 0x3f3f3f3f bool vis maxn int pre maxn 記錄beg到i路徑上的父結點 pre beg 1 int co...