dijkstra板子

来源:互联网 发布:毕向东java视频百度云 编辑:程序博客网 时间:2024/05/17 03:05

计蒜客-骑车比赛

#include<bits/stdc++.h>using namespace std;int e[1001][1001];int dis[1001],book[1001]={0};int main(){    int n,m,min,u,v;    scanf("%d %d",&n,&m);    for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)            if(i==j) e[i][j]=0;            else e[i][j]=99999999;    for(int i=1;i<=m;i++)    {        int a,b,c;        scanf("%d %d %d",&a,&b,&c);        e[a][b]=e[b][a]=c;    }    for(int i=1;i<=n;i++)        dis[i]=e[1][i];    book[1]=1;    //dijkstra    for(int i=1;i<=n-1;i++)    {        min=99999999;        for(int j=1;j<=n;j++)//找出目前最近的,没拓展过的顶点            if(book[j]==0&&dis[j]<min)            {                min=dis[j];                u=j;            }        book[u]=1;        for(v=1;v<=n;v++)        {            if(e[u][v]<99999999)            {                if(dis[v]>dis[u]+e[u][v])                    dis[v]=dis[u]+e[u][v];            }        }    }    printf("%d",dis[n]);        return 0;}
原创粉丝点击