zoukankan      html  css  js  c++  java
  • POJ 2387

    最短路模板 dij 和 spfa 都可以

    spfa:

    #include<stdio.h>
    #include<string.h>
    #include<cstring>
    #include<string>
    #include<math.h>
    #include<queue>
    #include<algorithm>
    #include<iostream>
    #include<stdlib.h>
    #include<cmath>
    
    #define INF 0x3f3f3f3f
    #define MAX 4*100105
    
    using namespace std;
    
    struct node
    {
        int u,v,len,next;
    }Map[MAX];
    
    int n,m,vis[MAX],dist[MAX],k,a[MAX];
    
    void Add(int u,int v,int len)
    {
        Map[k].u=u;
        Map[k].v=v;
        Map[k].len=len;
        Map[k].next=a[u];
        a[u]=k++;
    }
    
    void Init()
    {
        k=1;
    
        memset(vis,0,sizeof(vis));
    
        for(int i=0;i<MAX;i++)
        {
            dist[i]=INF;
            a[i]=-1;
        }
    }
    
    int spfa()
    {
        queue<int>Q;
    
        int start=1,k;
    
        dist[1]=0;
        vis[1]=1;
        Q.push(start);
    
        while(!Q.empty())
        {
            start=Q.front();
            Q.pop();
    
            vis[start]=0;
            for(k=a[start];k!=-1;k=Map[k].next)
            {
                int v=Map[k].v;
    
                if(dist[v] > dist[start]+Map[k].len)
                {
                    dist[v]=dist[start]+Map[k].len;
    
                    if(!vis[v])
                    {
                        vis[v]=1;
                        Q.push(v);
                    }
                }
            }
        }
    
        return 1;
    }
    
    int main()
    {
        int i,j,u,v,len;
    
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            Init();
    
            for(i=1;i<=m;i++)
            {
                scanf("%d%d%d",&u,&v,&len);
    
                Add(u,v,len);
                Add(v,u,len);
            }
    
            int ans=spfa();
    
            if(ans)
            printf("%d
    ",dist[n]);
        }
    
        return 0;
    }

    dij:
    #include<stdio.h>
    #include<string.h>
    #include<cstring>
    #include<string>
    #include<math.h>
    #include<queue>
    #include<algorithm>
    #include<iostream>
    #include<stdlib.h>
    #include<cmath>
    
    #define INF 0x3f3f3f3f
    #define MAX 1005
    
    using namespace std;
    
    int Map[MAX][MAX],vis[MAX],dist[MAX],n,m;
    
    int dij()
    {
        memset(vis,0,sizeof(vis));
    
        int i,j,k,minn;
    
        for(i=2;i<=n;i++)
            dist[i]=Map[1][i];
    
        vis[1]=1;
    
        for(i=1;i<n;i++)
        {
            minn=INF;
            for(j=1;j<=n;j++)
            {
                if(!vis[j] && minn > dist[j])
                {
                    k=j;
                    minn=dist[j];
                }
            }
    
            vis[k]=1;
    
            for(j=1;j<=n;j++)
            {
                if(!vis[j] && dist[k] + Map[k][j] < dist[j])
                {
                    dist[j]=dist[k]+Map[k][j];
                }
            }
        }
    
        return dist[n];
    }
    
    int main()
    {
        int i,j,u,v,len;
    
        while(scanf("%d%d",&m,&n)!=EOF)
        {
    
            for(i=0;i<MAX;i++)
            for(j=0;j<MAX;j++)
            Map[i][j]=INF;
    
            for(i=1;i<=m;i++)
            {
                scanf("%d%d%d",&u,&v,&len);
    
                Map[u][v]=Map[v][u]=min(Map[u][v],len);
            }
    
            int ans=dij();
    
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    小程序开发为何使用RPX
    C#判断网址是否可以访问
    [golang]go语言的channel学习
    tensorflow中图像增强的方法详解
    kaggle无法下载数据集解决办法
    keras模型中的model.fit()和model.fit_generator()的区别
    Keras.metrics中的accuracy总结
    Python 字符串前面加u,r,b,f的含义
    损失函数:binary_crossentropy、categorical_crossentropy、sparse_categorical_crossentropy
    jupyter代码自动补全
  • 原文地址:https://www.cnblogs.com/alan-W/p/5664035.html
Copyright © 2011-2022 走看看