zoukankan      html  css  js  c++  java
  • [ An Ac a Day ^_^ ] [kuangbin带你飞]专题四 最短路练习 POJ 2387 Til the Cows Come Home

    求1到N的最短路

    注意有重边 跑一遍dijkstra就行

     1 /* ***********************************************
     2 Author        :Sun Yuefeng
     3 Created Time  :2016/10/22 14:18:06
     4 File Name     :A.cpp
     5 ************************************************ */
     6 
     7 #include<cstdio>
     8 #include<iostream>
     9 #include<algorithm>
    10 #include<cmath>
    11 #include<cstring>
    12 #include<string>
    13 #include<bitset>
    14 #include<map>
    15 #include<set>
    16 #include<stack>
    17 #include<vector>
    18 #include<queue>
    19 #include<list>
    20 #define M(a,b) memset(a,b,sizeof(a))
    21 using namespace std;
    22 typedef long long ll;
    23 const int inf=0x3f3f3f3f;
    24 const int maxn=1e3+10;
    25 const int mod=1e7+7;
    26 int dx[8]= {0,0,1,-1,1,-1,1,-1};
    27 int dy[8]= {1,-1,0,0,-1,1,1,-1};
    28 
    29 int n,m;
    30 int way[maxn][maxn];
    31 int dis[maxn];
    32 bool vis[maxn];
    33 
    34 void dijkstra(int x){
    35     for(int i=1;i<=m;i++){
    36         dis[i]=inf;
    37         vis[i]=false;
    38     }
    39     dis[x]=0;
    40     for(int i=1;i<=m;i++){
    41         int k=-1;
    42         int min=inf;
    43         for(int j=1;j<=m;j++){
    44             if(!vis[j]&&dis[j]<min){
    45                 min=dis[j];
    46                 k=j;
    47             }
    48         }
    49         if(k==-1) break;
    50         vis[k]=true;
    51         for(int j=1;j<=m;j++){
    52             if(!vis[j]&&dis[j]>dis[k]+way[j][k]){
    53                 dis[j]=dis[k]+way[j][k];
    54             }
    55         }
    56     }
    57 }
    58 
    59 int main()
    60 {
    61     //freopen("in.txt","r",stdin);
    62     //freopen("out.txt","w",stdout);
    63     while(~scanf("%d%d",&n,&m)){
    64         int a,b,v;
    65         M(way,inf);
    66         for(int i=0;i<n;i++){
    67             scanf("%d%d%d",&a,&b,&v);
    68             if(way[a][b]>v){
    69                 way[a][b]=v;
    70                 way[b][a]=v;
    71             }
    72         }
    73         dijkstra(1);
    74         int min=inf;
    75         printf("%d
    ",dis[m]);
    76     }
    77     return 0;
    78 }
  • 相关阅读:
    互联网协议入门(一)(转)
    程序员的自我修养——操作系统篇(转)
    程序员的自我修养(2)——计算机网络(转)
    里氏替换原则
    Windows Phone 自学笔记 : ApplicationBar
    如何写好代码
    C# 通过操作注册表控制系统 (更新)
    优秀PPT 设计的十大秘诀
    设计模式学习--面向对象的5条设计原则
    SOLID (面向对象设计) From 维基百科
  • 原文地址:https://www.cnblogs.com/general10/p/5987685.html
Copyright © 2011-2022 走看看