国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
武安市| 南木林县| 衡山县| 襄垣县| 台中市| 巴彦淖尔市| 花垣县| 晋江市| 苏州市| 滨州市| 山阴县| 玉龙| 周口市| 枣强县| 石泉县| 叙永县| 兴义市| 长兴县| 兰溪市| 福安市| 石家庄市| 洛南县| 虎林市| 化州市| 沙坪坝区| 房山区| 清徐县| 黄大仙区| 屯昌县| 蛟河市| 临澧县| 四会市| 皮山县| 武宁县| 顺平县| 阳城县| 蒙山县| 苍梧县| 扶沟县| 日照市| 岚皋县|