Dijkstra 路徑規劃 C

2022-09-16 17:42:20 字數 1556 閱讀 2573

示例無向圖如下:(起始點為v0)

鄰接矩陣為:

注意:其中沒有連線的邊和自己到自己的點權值用10000表示。

**:

static

void main(string

args)

, , , , , };

int n = 6;

int s = new

int[n]; //

最短路徑的頂點集合

string mid = new

string[n];//

點的路線

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

shortestpathbydijkstra(n, graph, s, mid);

}public

static

int iscontain(int m,int s)//

判斷該頂點是否已經計算過

}  return

index;

}///

///dijkstrah實現最短路演算法

///static

void shortestpathbydijkstra(int n,int[,] graph, int s, string

mid)

}//將下乙個點加入s

s[next] =next;

if (min == 1000

)    的最短路徑為:無

", next);

}else

的最短路徑為:,路徑為:v0->v

", next, min, mid[next]);

}//重新初始0行所有列值

for (int j = 1; j < n; j++)//

迴圈第0行的列}}

}}

結果

解析:分三部分,主函式中給出圖中的初始鄰接矩陣,頂點個數。以及初始化最短路徑的頂點集合和點路線集合。

iscontain(int m,int s)這個函式是在每次迴圈的時候判斷該點是否已經在最短路徑集合中,即已經遍歷過。

接下來就是dijkstra演算法,大致步驟如下:

1、新增初始頂點v0在集合s中,遍歷第一行,找最小的權值所在的頂點列值j。

2、將j值做為下乙個點加入集合s中,輸出此時到達j點的最小路徑。

3、重新初始化第一行的值,通過判斷加入某點後graph[next][j]+min是否小於graph[0, j](其中j不在集合s中),若是則替換後者,並記錄此過程 mid[j] = mid[next] + "->v" + next;

4、迴圈1、2、3步驟頂點數-1次。

詳細參考:

全域性路徑規劃之 Dijkstra演算法

通過dijkstra計算圖g中的最短路徑時,需要指定起點s 即從頂點s開始計算 此外,引進兩個集合s和u。s的作用是記錄已求出最短路徑的頂點 以及相應的最短路徑長度 而u則是記錄還未求出最短路徑的頂點 以及該頂點到起點s的距離 初始時,s中只有起點s u中是除s之外的頂點,並且u中頂點的路徑是 起點...

全域性路徑規劃 01 Dijkstra演算法

應用場景 城市路網的路徑規劃 演算法流程 初始時,s集只包含起點s,u集包含除s外的其他節點,u集中的節點v與起點s相鄰,則該節點儲存值為距起點s的距離,若與起點s不相鄰,則距離為無限大 從u集中選出距離起點最短的節點k,並將節點k加入到s集中,同時從u集中移除節點k 更新u集中各個節點到起點s的距...

Dijkstra 旅遊規劃

有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入格式 輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 50...