zoukankan      html  css  js  c++  java
  • poj2387- Til the Cows Come Home(最短路)

    此为转载:http://blog.csdn.net/wangjian8006

    题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离

    解题思路:

    模版题,这题要注意的是有重边,dijkstra的算法需要考虑下,bellman-ford和spfa可以忽略这个问题

    PS:虽然转载,但是只有一点是值得我们去看的,那就是在有重边的Dijkstra的处理问题,虽然很简单,但不是每个人都能想到的;

    #include <iostream>  
    using namespace std;  
    #define inf 1<<29  
    #define MAXV 1005  
      
    int map[MAXV][MAXV];  
    int n,m;  
      
    void dijkstra(){  
        int i,j,min,v;  
        int d[MAXV];  
        bool vis[MAXV];  
      
        for(i=1;i<=n;i++){  
            vis[i]=0;  
            d[i]=map[1][i];  
        }  
      
        for(i=1;i<=n;i++){  
            min=inf;  
            for(j=1;j<=n;j++)  
                if(!vis[j] && d[j]<min){  
                    v=j;  
                    min=d[j];  
                }  
            vis[v]=1;  
      
            for(j=1;j<=n;j++)  
                if(!vis[j] && d[j]>map[v][j]+d[v])  
                    d[j]=map[v][j]+d[v];  
        }  
        printf("%d
    ",d[n]);  
    }  
      
    int main(){  
        int i,j,a,b,c;  
        while(~scanf("%d%d",&m,&n)){  
            for(i=1;i<=n;i++)  
                for(j=1;j<=n;j++)  
                    if(i==j)  
                        map[i][i]=0;  
                    else map[i][j]=map[j][i]=inf;  
              
            for(i=1;i<=m;i++){  
                scanf("%d%d%d",&a,&b,&c);  
                if(map[a][b]>c) map[a][b]=map[b][a]=c;   //这个if语句就是处理重边,保证了这条边绝对是最小的。
            }  
            dijkstra();  
        }  
        return 0;  
    }  
  • 相关阅读:
    BOM(JavaScript高程笔记)
    初识AJAX
    初识DOM
    《JavaScript DOM 编程艺术》读书笔记
    git/ TortoiseGit 在bitbucket.org 使用证书登陆
    原生JS的对象常用操作总结
    js 判断对象相等
    IE 坑爹的浏览器兼容模式
    Linux+mysql混杂
    前端-CS-04
  • 原文地址:https://www.cnblogs.com/SunQi-lvbu/p/6821861.html
Copyright © 2011-2022 走看看