题目大意 求多组i到j的最短路径 并输出字典序最小....

现在只会floyd的方式

利用dis[i][j] 表示i到j的路径中i 后面的节点

更新是比较dis[i][j] dis[i][k].

记住这个就好 ,其余存法貌似会有问题。代码如下:

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
const int maxn=50+5;
int N;
int MAP[maxn][maxn];
int dis[maxn][maxn];
int w[maxn];
void input()
{
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
dis[i][j]=1000000000;
memset(MAP,0,sizeof(MAP));
memset(w,0,sizeof(w));
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
int c;
scanf("%d",&c);
if(c==-1)
{
MAP[i][j]=1000000000;
}
else MAP[i][j]=c;
}
for(int i=1;i<=N;i++)
{
scanf("%d",&w[i]);
}
}
int FIND(int a,int b)
{
if(dis[a][b]!=1000000000)
{
return FIND(a,dis[a][b]);
}
else return b;
}
void floyd()
{
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
dis[i][j] = j; for(int k=1;k<=N;k++)
{
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
int new_patl = MAP[i][k] + MAP[k][j] + w[k];
if(MAP[i][j]>new_patl)
{
MAP[i][j]=new_patl;
dis[i][j]=dis[i][k];
}
else if(MAP[i][j]==new_patl)
{
dis[i][j]=min(dis[i][j],dis[i][k]);
}
}
}
}
void solve()
{
int CASE=0;
int n,m;
int next;
while(cin>>n>>m&&(n!=-1&&m!=-1))
{
printf("From %d to %d :\n",n,m);
printf("Path: ");
next = n;
while(next != m)
{
printf("%d-->", next);
next = dis[next][m];
}
printf("%d\n", next);
printf("Total cost : %d\n",MAP[n][m]);
printf("\n");
}
}
void init()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
int main()
{
// init();
while(cin>>N&&N)
{
input();
floyd();
solve();
}
}

【floyd存字典序路径】【HDU1385】【Minimum Transport Cost】的更多相关文章

  1. HDU1385 Minimum Transport Cost (Floyd)

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

  2. hdu1385 Minimum Transport Cost 字典序最小的最短路径 Floyd

    求最短路的算法最有名的是Dijkstra.所以一般拿到题目第一反应就是使用Dijkstra算法.但是此题要求的好几对起点和终点的最短路径.所以用Floyd是最好的选择.因为其他三种最短路的算法都是单源 ...

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

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

  4. hdu 1385 Minimum Transport Cost(floyd &amp;&amp; 记录路径)

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

  5. hdu 1385 Minimum Transport Cost (Floyd)

    Minimum Transport CostTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  6. HDU 1385 Minimum Transport Cost (Dijstra 最短路)

    Minimum Transport Cost http://acm.hdu.edu.cn/showproblem.php?pid=1385 Problem Description These are ...

  7. ZOJ 1456 Minimum Transport Cost(Floyd算法求解最短路径并输出最小字典序路径)

    题目链接: https://vjudge.net/problem/ZOJ-1456 These are N cities in Spring country. Between each pair of ...

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

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

  9. Minimum Transport Cost Floyd 输出最短路

    These are N cities in Spring country. Between each pair of cities there may be one transportation tr ...

随机推荐

  1. DICOM:C-GET与C-MOVE对照剖析

    背景: 之前专栏中介绍最多的两款PACS各自是基于dcmtk的dcmqrscp以及Orthanc.和基于fo-dicom的DicomService(自己开发的).该类应用场景都是针对于局域网,因此在使 ...

  2. Android 官方文档:(二)应用清单 —— 2.26 &lt;uses-permission&gt;标签

    syntax: <uses-permission android:name="string"         android:maxSdkVersion="inte ...

  3. VC2010 Working Directory

    VC project setting --〉debug中的working directory指的是工作文件夹在哪里? project属性下,Debug以下的 Working Directory 是为了 ...

  4. 淘宝弹性布局方案lib-flexible研究

    1. lib-flexible不能与响应式布局兼容 先说说响应式布局的一些基本认识: 响应式布局的表现是:网页通过css媒介查询判断可视区域的宽度,在不同的范围应用不同的样式,以便在不同尺寸的设备上呈 ...

  5. [KMP求最小循环节][HDU1358][Period]

    题意 求所有循环次数大于1的前缀 的最大循环次数和前缀位置 解法 直接用KMP求最小循环节 当满足i%(i-next[i])&&next[i]!=0 前缀循环次数大于1 最小循环节是i ...

  6. 从汇编看c++的new和delete

    下面是c++源码: class X { private: int _x; public: X() : _x(xx) {} ~X() {} }; int main() { X* xp = new X; ...

  7. 从汇编看c++内联函数评估求值

    在c++中,一个inline函数实体,在整个class 声明未被完全看到之前,是不会被评估求值的,也就是说,对于类里面内联的成员函数本身的分析,要等到class的声明完全结束之后才开始.下面试c++源 ...

  8. AngularJS 中的 Promise 和 设计模式

    解决 Javascript 异步事件的传统方式是回调函数:调用一个方法,然后给它一个函数引用,当这个方法完结的时候执行这个函数引用. <!-- lang: js --> $.get('ap ...

  9. python列表推导和字典推导

    代码如下: list = ['aaa','bbb','ccc','ddd'] dict = {key:value for value,key in enumerate(list)} print(dic ...

  10. 背包问题--nyoj题目106

    背包问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w< ...