當前位置:首頁 » 操作系統 » 演算法f

演算法f

發布時間: 2023-07-04 00:38:54

A. C++實現D演算法F演算法求最短路徑具體程序

/* 用鄰接矩陣表示的圖的Dijkstra演算法的源程序*/

#include<stdio.h>
#define MAXVEX 100

typedef char VexType;

typedef float AdjType;

typedef struct

{ VexType vexs[MAXVEX]; /* 頂點信息 */

AdjType arcs[MAXVEX][MAXVEX]; /* 邊信息 */

int n; /* 圖的頂點個數 */

}GraphMatrix;

GraphMatrix graph;

typedef struct {

VexType vertex; /* 頂點信息 */

AdjType length; /* 最短路徑長度 */

int prevex; /* 從v0到達vi(i=1,2,…n-1)的最短路徑上vi的前趨頂點 */

}Path;

Path dist[6]; /* n為圖中頂點個數*/

#define MAX 1e+8

void init(GraphMatrix* pgraph, Path dist[])

{
int i; dist[0].length=0; dist[0].prevex=0;
dist[0].vertex=pgraph->vexs[0];

pgraph->arcs[0][0]=1; /* 表示頂點v0在集合U中 */

for(i=1; i<pgraph->n; i++) /* 初始化集合V-U中頂點的距離值 */

{ dist[i].length=pgraph->arcs[0][i];

dist[i].vertex=pgraph->vexs[i];

if(dist[i].length!=MAX)

dist[i].prevex=0;

else dist[i].prevex= -1;

}

}

void dijkstra(GraphMatrix graph, Path dist[])
{ int i,j,minvex; AdjType min;
init(&graph,dist); /* 初始化,此時集合U中只有頂點v0*/
for(i=1; i<graph.n; i++)
{ min=MAX; minvex=0;
for(j=1; j<graph.n; j++)
if( (graph.arcs[j][j]==0) && (dist[j].length<min) ) /*在V-U中選出距離值最小頂點*/

if(minvex==0) break; /* 從v0沒有路徑可以通往集合V-U中的頂點 */
graph.arcs[minvex][minvex]=1; /* 集合V-U中路徑最小的頂點為minvex */
for(j=1; j<graph.n; j++) /* 調整集合V-U中的頂點的最短路徑 */
{ if(graph.arcs[j][j]==1) continue;
if(dist[j].length>dist[minvex].length+graph.arcs[minvex][j])
{ dist[j].length=dist[minvex].length+graph.arcs[minvex][j];
dist[j].prevex=minvex;
}
}
}
}

void initgraph()
{
int i,j;
graph.n=6;
for(i=0;i<graph.n;i++)
for(j=0;j<graph.n;j++)
graph.arcs[i][j]=(i==j?0:MAX);
graph.arcs[0][1]=50;
graph.arcs[0][2]=10;
graph.arcs[1][2]=15;
graph.arcs[1][4]=5;
graph.arcs[2][0]=20;
graph.arcs[2][3]=15;
graph.arcs[3][1]=20;
graph.arcs[3][4]=35;
graph.arcs[4][3]=30;
graph.arcs[5][3]=3;
graph.arcs[0][4]=45;
}

int main()
{
int i;
initgraph();
dijkstra(graph,dist);
for(i=0;i<graph.n;i++)
printf("(%.0f %d)",dist[i].length,dist[i].prevex);
return 0;
}
}
}
}

void initgraph()
{
int i,j;
graph.n=6;
for(i=0;i<graph.n;i++)
for(j=0;j<graph.n;j++)
graph.arcs[i][j]=(i==j?0:MAX);
graph.arcs[0][1]=50;
graph.arcs[0][2]=10;
graph.arcs[1][2]=15;
graph.arcs[1][4]=5;
graph.arcs[2][0]=20;
graph.arcs[2][3]=15;
graph.arcs[3][1]=20;
graph.arcs[3][4]=35;
graph.arcs[4][3]=30;
graph.arcs[5][3]=3;
graph.arcs[0][4]=45;
}

int main()
{
int i;
initgraph();
dijkstra(graph,dist);
for(i=0;i<graph.n;i++)
printf("(%.0f %d)",dist[i].length,dist[i].prevex);
return 0;
}
這個稍作改動就可以了。

B. 通信網中的F演算法和D演算法是怎樣的啊

F演算法 http://wenku..com/view/13a3ecea172ded630b1cb663.html

D演算法 http://www.doc88.com/p-606163139000.html

熱點內容
c語言編輯是 發布:2025-03-18 23:06:25 瀏覽:982
gamemaker腳本 發布:2025-03-18 23:01:12 瀏覽:358
怎樣給qq文件加密 發布:2025-03-18 22:59:18 瀏覽:613
為什麼qq密碼對卻登錄上 發布:2025-03-18 22:57:54 瀏覽:90
盤錦電腦伺服器 發布:2025-03-18 22:57:51 瀏覽:676
波蘭達演算法 發布:2025-03-18 22:57:10 瀏覽:328
怎麼連接動車上的wifi密碼多少 發布:2025-03-18 22:49:34 瀏覽:531
密碼放在什麼文件夾裡面 發布:2025-03-18 22:48:12 瀏覽:316
shell腳本自動執行 發布:2025-03-18 22:22:53 瀏覽:404
長城電腦桌面雲伺服器放在哪裡 發布:2025-03-18 22:22:51 瀏覽:484