《挑战程序设计竞赛》 P108 Roadbloks 3255 改造Dijkstra算法 次短路径

1人阅读 评论(0) 收藏 举报
分类:

次短路径

题目链接: http://poj.org/problem?id=3255

我求出了最短路径,要改造一下

#include <iostream>
#include  <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include  <utility>
#include <bits/stdc++.h>
using namespace std;
int N,R;
const  int  MM=5001;
const  int INF=0x3f3f3f3f;
struct  Edge{
      int to;
      int cost;

};

typedef pair<int ,int> P; //first : 最短距离  second : 目的点。



vector<Edge> G[MM];

int shortest[MM];
int  shorter[MM];

void dijks(){

      priority_queue< P, vector<P>, greater<P> > q;
      shortest[1]=0;
      q.push(P(0,1));


      while( !q.empty())
      {
            P p= q.top(); q.pop();
            int v=p.second;
            if( shortest[v] < p.first ) return;

            for(int i=0;i<G[v].size(); i++){
                  Edge &e = G[v][i];
                  if( shortest[ e.to ] > shortest[ v ] + e.cost ){
                        shortest[e.to] = shortest[ v ] + e.cost;
                        q.push( P( shortest[e.to] ,e.to) );
                        //cout << "入队" << shortest[e.to] <<" "<<e.to <<endl;
                  }
            }
      }
}


int main()

{
      cin >>  N >> R;

      for(int i=1;i<=R;i++){
            int a, b,c; cin >> a>> b >> c;

           Edge e; e.to= b;e.cost = c;

           Edge ee; ee.to=a; ee.cost =c;

           G[a].push_back(e);
           G[b].push_back(ee);
      }

      fill(shortest+1, shortest+N+1, INF );
      dijks();


      cout << *min_element(shortest+1, shortest+N+1 );

      for(int i=1;i<=N;i++){

            cout <<  i <<" "<< shortest[i] <<endl;
      }


    return 0;
}

查看评论

数据结构和算法

本次课主要是介绍在游戏开发中经常使用的数据结构,例如数组,链表,栈,队列,二叉树,递归等重要知识点讲解以及将它们里灵活的运用到算法里面。
  • 2015年01月29日 08:45

poj3255 次短路Dijkstra

挑战程序设计竞赛上的题目。 题意:给一个边权都是正的无向图,求1到n点的次短路。 分析: 先说一下标准的dijkstra+heap的,实际上以前写的程序都是在完整循环一次之后会确定从s到这个点的最短路...
  • NGccc
  • NGccc
  • 2015-04-15 16:54:00
  • 672

poj3255次短路算法

Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10539   Ac...
  • yuanjunlai141
  • yuanjunlai141
  • 2015-12-17 21:11:34
  • 1638

如何利用Dijkstra计算次短路径

http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm Related problems and algorithms[edit] Th...
  • yanhc519
  • yanhc519
  • 2014-10-07 15:39:37
  • 1905

Dijkstra求最短路径和次短路径,类似求次大值

首先,有时候题目需要得到的不是最值,而是次值。 与我们求最值过程类似,我们求最值,若是最值被替换,原来的最值就变成次值,若是次值可以更新就更新。 没有增加多少难度。 例 USACO 2006 N...
  • klxwl
  • klxwl
  • 2016-11-07 17:10:29
  • 188

POJ_3255_Roadblocks【次短路径】

Roadblocks Time Limit: 2000MS        Memory Limit: 65536K Total Submissions: 14180        Accepted...
  • huangshuai147
  • huangshuai147
  • 2017-04-04 18:13:16
  • 572

dijkstra求次短路径

之前用Dijkstra算法求过最短路径,求次短路径在之前的方法上做一下修改就可以。 求从s到t的次短路径有两种情况:1、起点s到某个顶点u的最短路+d(u,t)。2、起点到某个顶点u的次短路+d(u...
  • zhj_fly
  • zhj_fly
  • 2017-07-20 12:30:07
  • 338

迷阵突围(dijkstra求次短路径)

求图中的次短路径输入格式第一行输入两个整数 n (1≤n≤200) 和 m,表示一共有 n 个点和 m 条边。接下来输入n 行,每行输入两个整数xi​,yi​ (−500≤xi​,yi​≤500),代...
  • zxk_hi
  • zxk_hi
  • 2018-04-21 15:54:35
  • 38

《挑战程序设计》的一些笔记

2.5 图 图的表示 掌握用邻接表建图 最短路径:SPFA(队列实现,每次从队列中去除元素松弛); dijkstra(无负权边,分为两个集合,从未求出最短路径的集合中选出最小的松弛) 最小生成树:k...
  • CharmlessYi
  • CharmlessYi
  • 2016-06-23 18:08:49
  • 812

POJ3255(次短路)

题目链接:点击打开链接 解题思路: 按照Dijkstra思想做的次短路,第一次用邻接表,注意题中是双向边并且节点的下标要分别-1. 完整代码: #include #inclu...
  • u013447865
  • u013447865
  • 2015-03-27 20:54:42
  • 975
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 3988
    积分: 565
    排名: 8万+
    博客专栏
    文章存档