更改Dijkstra:求起点到终点的path数组
作者:
阿飞大魔王
,
2024-08-27 22:35:38
,
所有人可见
,
阅读 11
#include<bits/stdc++.h>
using namespace std;
const int N = 510;
int n,m;
int dist[N],pre[N],g[N][N];
bool used[N];
vector<int>path;
void dijkstra(int start,int end)
{
memset(dist,0x3f,sizeof dist);
dist[start]=0;
for(int i=0;i<n;i++)
{
int t=-1;
for(int j=1;j<=n;j++)
if(!used[j]&&(t==-1||dist[j]<dist[t]))
t=j;
used[t]=true;
for(int j=1;j<=n;j++)
if(dist[j]>dist[t]+g[t][j])
dist[j]=dist[t]+g[t][j],pre[j]=t;
}
printf("dist[%d]路径长度为:%d\n",end,dist[end]);
for(int i=end;i!=start;i=pre[i])
path.push_back(i);
path.push_back(start);
for(int i=path.size()-1;i>=0;i--)
cout<<path[i]<<' ';
}
int main()
{
memset(g,0x3f,sizeof g);
cin>>n>>m;
while(m--)
{
int a,b,c;
cin>>a>>b>>c;
g[a][b]=min(g[a][b],c);
}
int start,end;
cin>>start>>end;
dijkstra(start,end);
return 0;
}