最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

多條最短路徑的dijstra

2022-12-29 17:41 作者:vo17242  | 我要投稿

圖里面可能有多條最短路徑,并且我們可能會(huì)想要獲得多條最短路徑

通過(guò)給每一個(gè)節(jié)點(diǎn)維護(hù)一個(gè)前面節(jié)點(diǎn)數(shù)組,當(dāng)新的距離等于這個(gè)節(jié)點(diǎn)當(dāng)前的距離時(shí),不是拋棄這條路徑,而是將這條路徑保存到數(shù)組中,當(dāng)新的距離小于這個(gè)節(jié)點(diǎn)當(dāng)前的距離時(shí),清空數(shù)組,將當(dāng)前路徑存入

最后通過(guò)回溯來(lái)獲得所有的路徑(廣度優(yōu)先搜索也行)


代碼

```

#include <iostream>
#include <vector>

using namespace std;
void backtracking(vector<vector<int>>& c,vector<vector<int>>& path_arr,vector<int> path,int i)
{

??? path.emplace_back(i);
??? if(i==0)
??? {
??????? path_arr.emplace_back(path);
??????? return;
??? }
??? for(int j=0;j<c[i].size();j++)
??? {
??????? backtracking(c,path_arr,path,c[i][j]);
??? }
}
int main()
{
??? int n,m;
??? cin>>n>>m;
??? vector<vector<int>> g(n);
??? for(int i=0;i<n;i++)
??? {
??????? g[i].resize(n);
??? }
??? for(int i=0;i<n;i++)
??? {
??????? for(int j=0;j<n;j++)
??????? {
??????????? g[i][j]=INT32_MAX;
??????? }
??? }
??? for(int i=0;i<m;i++)
??? {
??????? int from,to,weight;
??????? cin>>from>>to>>weight;
??????? g[from][to]=weight;
??? }
??? vector<int> a(n);
??? vector<int> b(n,INT32_MAX);
??? b[0]=0;
??? vector<vector<int>> c(n);
??? while(true)
??? {
??????? int flag=1;
??????? for(int i=0;i<a.size();i++)
??????? {
??????????? if(a[i]!=1)
??????????? {
??????????????? flag=0;
??????????????? break;
??????????? }
??????? }
??????? if(flag==1)
??????? {
??????????? break;
??????? }
??????? int min_dist=INT32_MAX;
??????? int min_idx=-1;
??????? for(int i=0;i<a.size();i++)
??????? {
??????????? if(a[i]==0)
??????????? {
??????????????? if(min_dist>b[i])
??????????????? {
??????????????????? min_dist=b[i];
??????????????????? min_idx=i;
??????????????? }
??????????? }
??????? }
??????? a[min_idx]=1;
??????? for(int i=0;i<n;i++)
??????? {
??????????? if(g[min_idx][i]!=INT32_MAX&&a[i]!=1)
??????????? {
??????????????? int dist=min_dist+g[min_dist][i];
??????????????? if(dist==b[i])
??????????????? {
??????????????????? c[i].emplace_back(min_idx);
??????????????? }
??????????????? else if(dist < b[i])
??????????????? {
??????????????????? b[i]=dist;
??????????????????? c[i].clear();
??????????????????? c[i].emplace_back(min_idx);
??????????????? }
??????????? }
??????? }
??? }
??? for(int i=0;i<a.size();i++)
??? {
??????? cout<<i<<": "<<b[i]<<endl;
??? }
??? vector<int> path;
??? vector<vector<int>> path_arr;
??? backtracking(c,path_arr,path,3);
??? for(int i=0;i<path_arr.size();i++)
??? {
??????? for(int j=0;j<path_arr[i].size();j++)
??????? {
??????????? cout<<path_arr[i][j]<<" ";
??????? }
??????? cout<<endl;
??? }
??? return 0;
}

```

圖數(shù)據(jù)

```

4 4
0 1 1
1 3 1
0 2 1
2 3 1

```


多條最短路徑的dijstra的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
舟山市| 衢州市| 安龙县| 麻栗坡县| 南丹县| 霍州市| 梅河口市| 鞍山市| 肇东市| 七台河市| 沅陵县| 梅州市| 信宜市| 喜德县| 兴安盟| 搜索| 建始县| 光山县| 美姑县| 灌云县| 大丰市| 呼图壁县| 鄯善县| 石嘴山市| 阜平县| 茌平县| 曲水县| 崇明县| 社会| 苍溪县| 宿松县| 远安县| 宁河县| 隆安县| 白水县| 岑巩县| 南丰县| 若尔盖县| 江永县| 芦溪县| 明溪县|