五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ó)家法律
河间市| 丹寨县| 杨浦区| 新昌县| 莱阳市| 简阳市| 连江县| 鹤峰县| 阿克苏市| 荃湾区| 汕尾市| 广昌县| 建水县| 德清县| 蒲城县| 宜兰市| 林西县| 饶河县| 抚远县| 沛县| 菏泽市| 蓝田县| 米易县| 卢湾区| 嵊泗县| 三门峡市| 北京市| 泗水县| 成安县| 肇东市| 浦县| 金阳县| 益阳市| 洛川县| 太和县| 高密市| 资中县| 津市市| 女性| 罗山县| 台东县|