ACM-最短路第一讲

基础的Dijkstra算法:算法视频 :百度搜索严蔚敏数据结构视频(28,29集)

       算法模板:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int inf = 1<<30;
int n,m;
int map[300][300];
int vis[300],cast[300];
void Dijkstra(int s,int e)
{
    int i,j,min,pos;
    memset(vis,0,sizeof(vis));
    cast[s]=0;
    vis[s]=1;
    for(i=0;i<n;i++)cast[i]=map[s][i];
    for(i=1;i<n;i++)
    {
        min=inf;
        for(j=0;j<n;j++)
        {
            if(cast[j]<min&&!vis[j])
            {
                pos=j;
                min=cast[j];
            }
        }
        vis[pos]=1;
        for(j=0;j<n;j++)
        {
            if(cast[pos]+map[pos][j]<cast[j]&&!vis[j])
            cast[j]=cast[pos]+map[pos][j];
        }
    }
}
int main()
{
    int i,j,x,y,z,start,end;
    while(~scanf("%d%d",&n,&m))
    {
        for(i = 0; i<200; i++)
        {
            for(j = 0; j<200; j++)
                map[i][j] = inf;
            map[i][i] = 0;
        }
        for(i = 0; i<m; i++)
        {
            scanf("%d%d%d",&x,&y,&z);
            if(z<map[x][y])
            map[x][y] = map[y][x] = z;
        }
        scanf("%d%d",&start,&end);
        Dijkstra(start,end);
        printf("%d\n",cast[end]==inf?-1:cast[end]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/soul778888/article/details/80315906