zoukankan      html  css  js  c++  java
  • kuangbin专题专题四 Til the Cows Come Home POJ

    题目链接: https://vjudge.net/problem/POJ-2387

    题意:从编号为n的城市到编号为1的城市的最短路。

    思路:dijkstra模板题,直接套板子,代码中我会带点注释给初学者看。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <cstdio>
     5 #include <string>
     6 using namespace std;
     7 
     8 typedef long long LL;
     9 #define inf (1LL << 30) - 1
    10 #define rep(i,j,k) for(int i = (j); i <= (k); i++)
    11 #define rep__(i,j,k) for(int i = (j); i < (k); i++)
    12 #define per(i,j,k) for(int i = (j); i >= (k); i--)
    13 #define per__(i,j,k) for(int i = (j); i > (k); i--)
    14 
    15 const int N = 1100;
    16 bool vis[N]; //是否访问过
    17 int mp[N][N];
    18 int dis[N]; //到不同城市的距离
    19 int t,n;
    20 
    21 void init(){
    22     memset(vis,0,sizeof(vis));
    23     rep(i,1,n) rep(j,1,n){
    24         if(i == j) mp[i][j] = 0;
    25         else mp[i][j] = inf;
    26     }
    27 }
    28 
    29 void input(){
    30 
    31     int u,v,w;
    32     rep(i,1,t){
    33         cin >> u >> v >> w;
    34         if(mp[u][v] > w) mp[u][v] = mp[v][u] = w;
    35     }
    36 
    37 }
    38 
    39 void dijkstra(){
    40 
    41     rep(i,1,n) dis[i] = mp[n][i]; //n到其他城市的距离
    42     vis[n] = true; //标记n城市任务完成
    43 
    44     rep(i,2,n){ //接下来 n-1个城市的操作
    45 
    46         int x = -1;
    47         int c = inf;
    48 
    49         rep(j,1,n){
    50             //该城市未被访问过  选出当前到每个点的最小值,并得到坐标
    51             if(!vis[j] && c > dis[j]) x = j, c = dis[j];
    52         }
    53         if(x == -1) continue; //没找到一个,即该城市无法到达其他未被访问的城市
    54 
    55         vis[x] = true; //标记这个当前这个离起始点最短距离的城市
    56         rep(p,1,n){
    57 
    58             //起始点到p城市的所有距离之和 大于 起始点到x点的所有距离之后 加上 x点到p点的距离
    59              if(!vis[p] && dis[x] + mp[x][p] < dis[p]){
    60                 dis[p] = dis[x] + mp[x][p];
    61                }
    62         }
    63 
    64     } 
    65     //到达点1城市的最短距离
    66     cout << dis[1] << endl;
    67 }
    68 
    69 int main(){
    70 
    71 
    72     ios::sync_with_stdio(false);
    73     cin.tie(0);
    74 
    75     cin >> t >> n;
    76 
    77     init(); //初始化
    78     input(); //输入
    79     dijkstra(); //最短路
    80 
    81     getchar();getchar();
    82 
    83     return 0;
    84 }

  • 相关阅读:
    解决vs 编译的bug“请检查是否是磁盘空间不足、路径无效或权限不够”
    lua 使用正则表达式分割字符串
    cocos2dx通过ndk编译c++库
    通过luac编译lua脚本
    redis的一个bug
    将文件转成16进制过程
    fiddler 模拟发送post请求
    cocostudio的bug(1)
    Eclipse+Tomcat搭建jsp服务器
    iOS本地推送与远程推送
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/11200557.html
Copyright © 2011-2022 走看看