prim(graph g,int vcount,int father);
g:圖,用鄰接矩陣表示
vcount:表示圖的頂點個數
father:用來記錄每個節點的父節點
null
常數max_vertexes
為圖最大節點數
常數infinity
為無窮大
#define infinity 1000000
#define max_vertexes 5
typedef int graph[max_vertexes][max_vertexes];
void prim(graph g,int vcount,int father)
used[0]=1;
for (i=1;i
} }result=dijkstra(graph g,int n,int s,int t, int path);
g:圖,用鄰接矩陣表示
n:圖的頂點個數
s:開始節點
t:目標節點
path:用於返回由開始節點到目標節點的路徑
最短路徑長度
輸入的圖的權必須非負
頂點標號從0開始
用如下方法列印路徑:
i=t;
while (i!=s)
printf("%d/n",s+1);
int dijkstra(graph g,int n,int s,int t, int path)
mark[s]=1;path[s]=0;d[s]=0;
for (i=1;i
mark[w]=1;
for (j=0;j
if ((mark[j]==0)&&(g[w][j]!=infinity)&&(d[j]>d[w]+g[w][j]))
} return d[t]; }
result=bellman_ford(graph g,int n,int s,int t,int path,int success);
g:圖,用鄰接矩陣表示
n:圖的頂點個數
s:開始節點
t:目標節點
path:用於返回由開始節點到目標節點的路徑
success:函式是否執行成功
最短路徑長度
輸入的圖的權可以為負,如果存在乙個從源點可達的權為負的迴路則success=0
頂點標號從0開始
用如下方法列印路徑:
i=t;
while (i!=s)
printf("%d/n",s+1);
int bellman_ford(graph g,int n,int s,int t,int path,int success)
success=0;
for (i=0;i
for (j=0;j
if (d[j]>d[i]+g[i][j]) return 0;
success=1;
return d[t]; }
floyd_washall(graph g,int n,graph d,graph p);
g:圖,用鄰接矩陣表示
n:圖的頂點個數 d:
d[i,j]
表示從i到j
的最短距離 p:
p[i,j]
表示從i到j
的最短路徑上
j 的父節點
null
void floyd_washall(graph g,int n,graph d,graph p)
for (i=0;i
for (k=0;k
for (i=0;i
for (j=0;j
if (d[i][j]>d[i][k]+d[k][j])
}
ACM內部函式10
quicksort int l,int r,int b l 排序上界,開始時 l 0 r 排序下界,開始時 r 陣列元素個數 b 被排序的元素 null 輸出公升序序列 void quicksort int l,int r,int b while b i i i if i b i x quickso...
ACM模板(9)鍊錶
acm模板列表 目錄 一,鍊錶 二,獲取鍊錶長度 鍊錶反轉 鍊錶中倒數第k個節點 三,鍊錶合併 把兩個鍊錶交叉合併為乙個鍊錶 把兩個公升序的鍊錶合併為乙個公升序的鍊錶 四,鍊錶和結構體指標陣列互轉 鍊錶排序 五,判斷鍊錶是否有環 求煉錶環的長度 求煉錶環的第乙個節點 struct listtnode...
ACM內部函式 數學問題 大數乘小數
include include include includeusing namespace std 語法 mult char c,char t,int m 引數 source 被乘數,用字串表示,位數不限 result 結果,用字串表示 m 乘數 返回值 null 注意 需要 string.h v...