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