zoukankan      html  css  js  c++  java
  • HDU2544最短路模板,

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<vector>
    #include<queue>
    #include<string.h>
    #include<stdlib.h>
    using namespace std;
    #define INF 0xfffffff
    #define N 1010
    
    int maps[N][N], dist[N];//distance保存表示从起点到i点的距离 maps保存图
    bool visit[N];//标记这个店是否被参观过
    int point, side;//点,边
    void Init();
    int Dij(int Star, int End);
    int main()
    {
        while(cin >> point >> side, point + side)
        {
            Init();//Initial
            int pa, pb, i, t;
            for(i=0; i<side; i++)
            {
                cin >>pa>>pb>>t;
                maps[pa][pb]=min(maps[pa][pb], t);//因为也许反向走路的长度不同
                maps[pb][pa]=maps[pa][pb];
            }
            int answer=Dij(1, point);
            cout << answer << endl;
        }
        return 0;
    }
    void Init()
    {
        for(int i=0; i<=point; i++)
        {
            visit[i]=false;
            dist[i]=INF;
            for(int j=0; j<=i; j++)//其实不明白这里为什么这样写,即便是我自己写的
                maps[i][j]=maps[j][i]=INF;//真的很神奇,其实这就等同于for(int j=0; j<=point; j++) maps[i][j]=INF;
    
        }
    }
    int Dij(int Star, int End)
    {
        dist[Star]=0;
        for(int i=1; i<=point; i++)
        {
            int index, Min;
            index=0, Min=INF;//index 代表与i距点最近的点的下标
            for(int j=1; j<=point; j++)
            {
                if(!visit[j]&&Min>dist[j])
                    Min=dist[j], index=j;
            }//代表找到了距1点最近的一个点           这是一个二维矩阵
            visit[index]=true;
            for(int j=1; j<=point; j++)
            {
                if(!visit[j]&&dist[j]>dist[index]+maps[index][j])
                    dist[j]=dist[index]+maps[index][j];
            }
        }
        return dist[End];
    }
    

      

    连接表代码
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <algorithm>
    #include <vector>
    #include <queue>
    using namespace std;
    #define INF 0xfffffff
    #define maxn 1002
    struct node
    {
        int e, w;
    };
    vector<node> G[maxn];
    int dist[maxn];//表示从起点到第i点的距离
    bool vis[maxn];//判断这个点是否被参观过
    int m, n;//边数 m   顶点数 n
    
    void Init()
    {
        memset(vis, false, sizeof(vis));
    
        for(int i=0; i<=n; i++)
        {
            dist[i] = INF;
            G[i].clear();
        }
    }
    
    int Dij(int Star,int End)//起点 --- 终点
    {
        dist[Star] = 0;
        for(int i=1; i<=n; i++)
        {
            int index = 0, Min = INF;
            for(int j=1; j<=n; j++)
            {
                if( !vis[j] && Min > dist[j] )//找出没有被参观过,并且距离起点最近的点
                    Min = dist[j], index = j;
            }
            vis[index] = true;
            int len = G[index].size();
            for(int j=0; j<len; j++)//更新所有未曾到达的点距离,使之成为最近的点
            {
                node P;
                P = G[index][j];
    
                if( !vis[P.e] && dist[P.e] >  dist[index] + P.w )
                {
                    dist[P.e] =  dist[index] + P.w;
                }
            }
        }
        return dist[End];
    }
    
    
    
    int main()
    {
        node P;
        while(cin >> n >> m, m + n)
        {
            Init();
            int a, b , c;
    
            for(int i=0; i<m; i++)
            {
                cin >> a >> b >> c;
                P.e = b, P.w = c;
                G[a].push_back(P);
                P.e = a;
                G[b].push_back(P);
            }
    
            int ans = Dij(1,n);
            cout << ans << endl;
        }
        return 0;
    }
     
  • 相关阅读:
    Python常用模块之sys
    python操作zip文件
    python的os模块
    [Python模块学习]用qrcode模块生成二维码
    os模块os.walk() 方法和os.path.join()的简单使用
    python操作redis详解
    成员变量和局部变量
    类和对象 引用属性和方法举例
    Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0
    泛型--面向对象8
  • 原文地址:https://www.cnblogs.com/wazqWAZQ1/p/4656217.html
Copyright © 2011-2022 走看看