zoukankan      html  css  js  c++  java
  • HDU

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874

    #include <iostream>
    #include <string.h>
    #define N 205
    #define MAX 100000005
    using namespace std;
    /****************************************************************************************************************
                        题意:dijkstra
                        思路:
                        1,注意不在起终点之间没有路径到大的判断条件
                        2,在注释中已给出,用dist 不能用 map[i][j]
    ****************************************************************************************************************/
    int map[N][N];
    int dist[N];
    int visit[N];       //访问标志,用来判断点是否在特殊路径的集合内
    int dijkstra(int st,int n)
    {
        memset(dist,MAX,sizeof(dist));
        memset(visit,0,sizeof(visit));
        for(int i = 0;i < n;i ++)       //初始化特殊路径长度
            dist[i]=map[st][i];
    
        dist[st]=0;     //自己到自己长度为0
        visit[st]=1;
    
        for(int i = 1;i <= n;i ++){
            int id,ans=MAX;
            for(int j = 0;j < n;j ++){
                if(!visit[j] && dist[j] < ans){     //非特殊路径最小值
                    ans=dist[j];
                    id=j;
                }
            }
            visit[id]=1;
            for(int j = 0;j < n;j ++)
                if(!visit[j] && dist[id]+map[id][j] < dist[j])
                    dist[j]=dist[id]+map[id][j];        //最优存在于 非特殊路径最小点到当前点 or st直接到 j 的距离
        }
    }
    int main()
    {
        int n,m;
        while(cin>>n>>m)
        {
            for(int i = 0;i < n;i ++)
                for(int j = 0;j < n;j ++)
                    map[i][j]=MAX;
            int a,b,le;
            for(int i = 0;i < m;i ++){
                cin>>a>>b>>le;
                if(le < map[a][b])
                    map[a][b]=map[b][a]=le;     //无向图,双向赋最小值
            }
            int st,ed;
            cin>>st>>ed;
    
            dijkstra(st,n);
    
            if(dist[ed] != MAX)     //这里wa了,不知道为什么用 map[st][ed] != MAX 不能表示 st-ed没有路径
                cout<<dist[ed]<<endl;
            else
                cout<<"-1"<<endl;
        }
        return 0;
    }
    



  • 相关阅读:
    vue学习 基本简介,安装,示例,options
    python操作谷歌翻译
    Celery笔记
    nps内网穿透笔记
    初学django基础05 路由系统,django的请求与返回
    初学Django基础04 http|jsonresponse,filter模板过滤器,cvb与fvb
    计数二进制字符串
    字符串相加
    类与对象
    Arrays
  • 原文地址:https://www.cnblogs.com/Jstyle-continue/p/6351990.html
Copyright © 2011-2022 走看看