需要处理好字典序最小的路径


HDU1385(ZOJ1456)-Minimum Transport

//Hdu1385-ZOJ1456
//给定邻接矩阵,求给定起点到终点的最短路径,若有相同路长的路径按照字典序输出
//Floyd比较适合此题
//网上看到的两种做法比较推荐
//第一种是Floyd+记录起点后继
//第二种是Floyd+深搜(从起点开始深搜至终点)-利用Floyd得到的最短路剪枝
//其他的解法则是按照SPFA,dijkstra解,当路长相同时需要进行比较(较繁琐)
//Time:0Ms Memory:404K
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; #define INF 0x3f3f3f3f
#define MAX 105 int n;
int d[MAX][MAX];
int board[MAX][MAX], c[MAX];
int path[MAX][MAX]; //记录i到j最短路径中i的后继 void floyd()
{
memcpy(d, board, sizeof(d));
for (int k = 1; k <= n; k++)
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
if (d[i][j] > d[i][k] + d[k][j] + c[k])
{
d[i][j] = d[i][k] + d[k][j] + c[k];
path[i][j] = path[i][k];
}
//相同路径下选择后继更小的
else if (d[i][j] == d[i][k] + d[k][j] + c[k] && path[i][j] > path[i][k])
path[i][j] = path[i][k];
}
} void output(int s,int e)
{
printf("-->%d", path[s][e]);
if (path[s][e] != e)
output(path[s][e], e);
} int main()
{
while (scanf("%d", &n), n)
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
scanf("%d", &board[i][j]);
if (board[i][j] == -1) board[i][j] = INF;
path[i][j] = j;
}
for (int i = 1; i <= n; i++)
scanf("%d", &c[i]);
floyd();
int s, e;
while (scanf("%d%d", &s, &e), s != -1 && e != -1)
{
printf("From %d to %d :\n", s, e);
printf("Path: %d", s);
if(s != e) output(s, e); //起点与终点不同开始递归
printf("\nTotal cost : %d\n\n", d[s][e]);
}
}
return 0;
}

ACM/ICPC 之 Floyd+记录路径后继(Hdu1385(ZOJ1456))的更多相关文章

  1. HDU1385 (Floyd记录路径)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  2. HDU 1385 Minimum Transport Cost( Floyd + 记录路径 )

    链接:传送门 题意:有 n 个城市,从城市 i 到城市 j 需要话费 Aij ,当穿越城市 i 的时候还需要话费额外的 Bi ( 起点终点两个城市不算穿越 ),给出 n × n 大小的城市关系图,-1 ...

  3. hdu 1385 floyd记录路径

    可以用floyd 直接记录相应路径 太棒了! http://blog.csdn.net/ice_crazy/article/details/7785111 #include"stdio.h& ...

  4. ACM/ICPC 之 Floyd练习六道(ZOJ2027-POJ2253-POJ2472-POJ1125-POJ1603-POJ2607)

    以Floyd解法为主的练习题六道 ZOJ2027-Travelling Fee //可免去一条线路中直接连接两城市的最大旅行费用,求最小总旅行费用 //Time:0Ms Memory:604K #in ...

  5. ACM/ICPC 之 Floyd范例两道(POJ2570-POJ2263)

    两道以Floyd算法为解法的范例,第二题如果数据量较大,须采用其他解法 POJ2570-Fiber Network //经典的传递闭包问题,由于只有26个公司可以采用二进制存储 //Time:141M ...

  6. 牛客网暑期ACM多校训练营(第三场) A PACM Team 01背包 记录路径

    链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 Eddy was a contestant participating in ACM ICPC ...

  7. Minimum Transport Cost(floyd+二维数组记录路径)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  8. [Python] 弗洛伊德(Floyd)算法求图的直径并记录路径

    相关概念 对于一个图G=(V, E),求图中两点u, v间最短路径长度,称为图的最短路径问题.最短路径中最长的称为图的直径. 其中,求图中确定的某两点的最短路径算法,称为单源最短路径算法.求图中任意两 ...

  9. POJ 3436:ACM Computer Factory(最大流记录路径)

    http://poj.org/problem?id=3436 题意:题意很难懂.给出P N.接下来N行代表N个机器,每一行有2*P+1个数字 第一个数代表容量,第2~P+1个数代表输入,第P+2到2* ...

随机推荐

  1. Java8初体验(二)Stream语法详解

    感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验(一)lambda表达式语法比 较详细的介绍了lambda表达式的方方面面,细心的读者会发现那篇文章的例 ...

  2. 【转】 使用maven创建web项目

    生成kafka java客户端时,参考的资料!!!文章来源:http://blog.csdn.net/zhshulin/article/details/37921705 目前做的项目使用的是MAVEN ...

  3. fedora23忘记root密码怎么办??

    fedora23使用的是uefi, 不是 传统的grub 所以在编辑grub的时候, 跟以前的版本略有不同 最最重要的是: 在编辑启动条目的时候, 那个 linuxefi ... vmlinuz... ...

  4. localdomain的linux域

    both和and的区别? both强调(两者)都,用于肯定语气, and字面意思是"和,而且",是用于表示并列关系的句子,通常位于最后两个人或物之间,将将人物串联起来 如: thi ...

  5. R语言画图实例-参考R语言实战

    dose <- c(, , , ,) drugA <- c(, , , , ) drugB <- c(, , , , ) # 数据准备 opar <- par(no.reado ...

  6. 浅谈javascript函数节流

    浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...

  7. [设计模式] javascript 之 模板方法模式

    模板方法模式说明 定义:定义方法操作的骨架,把一些具体实现延伸到子类中去,使用得具体实现不会影响到骨架的行为步骤! 说明:模式方法模式是一个继承跟复用的典型模式,该模式定义了一个抽象类,Abstrac ...

  8. CSS hack 汇总

    1, IE条件注释法,微软官方推荐的hack方式. <!]> IE6以及IE6以上版本可识别 <![endif]--> <!]> 仅IE7可识别 <![end ...

  9. AlwaysOn可用性组功能测试(三)--其他测试

    三. 大数据量操作的时候发生的切换 1.对表进行大量插入,执行1千万遍,如下语句 insert into aa select * from sys.sysprocesses go 10000000 2 ...

  10. Ubuntu使用ApkTool进行APK反编译

    1.Apktool下载 http://ibotpeaches.github.io/Apktool/ 下载最新版本Apktool_2.1.1.jar 2.新建一个apktool目录,将Apktool_2 ...