题目1447:最短路 【dijkstra法】

来源:互联网 发布:python调用webservice 编辑:程序博客网 时间:2024/04/28 01:03
#include <stdio.h>#include <vector>using namespace std;struct E {    int next;    int c;};vector<E> edge[101];bool mark[101];int dis[101];int main() {    int n,m;    while(scanf("%d %d",&n,&m)!=EOF) {if(n==0 && m==0) break;for(int i=1;i<=n;i++)    edge[i].clear();for(int i=1;i<=n;i++) {    mark[i] = false;    dis[i] = -1;}while(m--) {    int a,b,c;    scanf("%d %d %d",&a,&b,&c);    E tmp;    tmp.c = c;    tmp.next = b;    edge[a].push_back(tmp);    tmp.next = a;    edge[b].push_back(tmp);}mark[1] = true;dis[1] = 0;int newP = 1;for(int i=1;i<n;i++) {    for(int j=0;j<edge[newP].size();j++) {int t = edge[i][j].next;int c = edge[i][j].c;if(mark[t] == true) continue;if(dis[t]==-1 || dis[t] > dis[newP] + c)    dis[t] = dis[newP] + c;    }    int min = 123123123;    for(int j=1;j<=n;j++) {if(mark[j] == true) continue;if(dis[j] == -1) continue;if(dis[j] < min) {    min = dis[j];    newP = j;}    }    mark[newP] = true;}printf("%d\n",dis[n]);    }    return 0;}


Floyd算法可以计算出图中所有结点对之间的最短路径长度,而dijkstra算法只能求的某特定结点到其他所有结点的最短路径距离。


原创粉丝点击