标签:
又是一道最短路基础题目,注意两点就可以了:
1.输入的时候可能会两点之间有多条路,选最短的存起来。
2.判断有没有路径存在,可以判断一下终点到起点的距离是否小于原来初始化的最大值,如果是就输出结果,否则输出-1
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<string>
#include<algorithm>
#define MAX 10010000
using namespace std;
int d[205];
int gra[205][205];
int visit[205];
int n,m,s,t;
void dijkstra()
{
int i,j;
for(i=0; i<n; i++)
d[i] = MAX;
d[s] = 0;
memset(visit,0,sizeof(visit));
for(i=0; i<n; i++)
{
int x ,y = MAX;
for(j=0; j<n; j++)
{
if(!visit[j] && d[j] < y)
y = d[x = j];
}
visit[x] = 1;
for(j=0; j<n; j++)
if(!visit[j] && d[j]>d[x]+gra[x][j])
d[j] = d[x] + gra[x][j];
}
return ;
}
int main()
{
int i,j,a,b,c;
while(cin >> n >> m)
{
for(i=0; i<n; i++)
for(j=0; j<n; j++)
gra[i][j] = MAX;
for(i=1; i<=m; i++)
{
cin >> a >> b >> c;
if(gra[a][b] > c)
gra[a][b] = gra[b][a] = c;
}
cin >> s >> t;
dijkstra();
if(d[t] < MAX)
cout << d[t] << endl;
else
cout << -1 << endl;
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/sinat_22659021/article/details/47706291