Dijkstra最短路

来源:互联网 发布:网络歌曲2016 编辑:程序博客网 时间:2024/04/29 04:38

邻接矩阵表示

#include<stdio.h>#include<map>#include<queue>#include<string.h>#include<math.h>#include<algorithm>#include<vector>using namespace std;#define MAX_V 510#define INF 1000000000int n;int m;int start;int end;int G[MAX_V][MAX_V];int weight[MAX_V];int d[MAX_V];int w[MAX_V];int num[MAX_V];bool visited[MAX_V];void Dijkstra(int s){    fill(d,d+MAX_V,INF);    memset(num,0,sizeof(num));    memset(w,0,sizeof(w));    d[s]=0;    w[s]=weight[s];    num[s]=1;    for(int i=0;i<n;i++){        int u=-1,MIN=INF;        for(int j=0;j<n;j++){            if(!visited[j]&&d[j]<MIN){                u=j;                MIN=d[j];            }        }        if(u==-1)   return ;        visited[u]=true;        for(int v=0;v<n;v++){            if(!visited[v]&&G[u][v]!=INF&&d[u]+G[u][v]<d[v]){                d[v]=d[u]+G[u][v];            }        }    }}int main(){    scanf("%d%d%d%d",&n,&m,&start,&end);    for(int i=0;i<n;i++){        scanf("%d",&weight[i]);    }    int u,v;    fill(G[0],G[0]+MAX_V*MAX_V,INF);    for(int i=0;i<m;i++){        scanf("%d%d",&u,&v);        scanf("%d",&G[u][v]);        G[v][u]=G[u][v];    }    Dijkstra(start);    printf("%d %d",num[end],w[end]);}
0 0
原创粉丝点击