HDU 1385 Minimum Transport Cost(Floyd+打印字典序最小路径)
http://acm.hdu.edu.cn/showproblem.php?pid=1385
题意:给你一个无向图,现在要你输出特定起点到终点的最短距离以及字典序最小的路径.不过本题的两路径之间的距离计算方式与常规不同.
分析:
直接用Floyd算法计算最短路径,且保存字典序最小的path路径即可.代码需要熟练掌握.
AC代码:
#include<cstdio>
#include<cstring>
#define INF 1e9
using namespace std;
const int maxn = 100+20;
int n;
int cost[maxn];
int dist[maxn][maxn];//最短距离
int path[maxn][maxn];//path[i][j]保存了从i到j路径的第一个点(除i以外)
void floyd()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
path[i][j]=j;
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(dist[i][k]<INF && dist[k][j]<INF)
{
if(dist[i][j] > dist[i][k]+dist[k][j]+cost[k])
{
dist[i][j] = dist[i][k]+dist[k][j]+cost[k];
path[i][j] = path[i][k];
}
else if(dist[i][j] == dist[i][k]+dist[k][j]+cost[k] && path[i][j]>path[i][k])
{
path[i][j]=path[i][k];
}
}
}
int main()
{
while(scanf("%d",&n)==1&&n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&dist[i][j]);
if(dist[i][j]==-1) dist[i][j]=INF;
}
for(int i=1;i<=n;i++)
scanf("%d",&cost[i]);
floyd();
while(true)
{
int u,v;
scanf("%d%d",&u,&v);
if(u==-1&&v==-1) break;
printf("From %d to %d :\n",u,v);
if(u!=v)
{
printf("Path: %d",u);
int beg = path[u][v];
while(true)
{
printf("-->%d",beg);
if(beg==v) { printf("\n"); break; }
beg = path[beg][v];
}
}
else //注意U==V的特殊情况
{
printf("Path: %d\n",u);
}
printf("Total cost : %d\n\n",dist[u][v]);
}
}
return 0;
}
分享到:
相关推荐
hdu 1695 GCD(欧拉函数+容斥原理).docx
acm hdu as easy as a+b
【HDU 3993】田忌赛马 题解+勘误 题解这里就略写一下了,主要是勘误。 这道题是2011年之前的多校训练题,2020年的今天,我们一个集训队全部挂在上面了。最后在HDU看到了9年前的讨论区,才知道这题有如下问题: speed...
ACM题库,一些题目和答案,以及解题报告,传上来共享
杭电OnlineJudge 200-2099的解题报告
hdu 3341(ac自动机+状态压缩) 题意:容易理解... 思路:首先一开始容易想到要用到dp,开设一个dp[41][41][41][41][501]的数组来解决,但是明显内存已经超出范围了,于是就想如何减少内存呢?只要知道A、T、C、G其中...
本人准备2020年保研机试时刷的题目(虽然最后机试取消了,...来自某中流985,在HDU和vjudge平台上大概刷了400道。本文件地图(excel表格)包含了绝大部分我刷过的题目,笔记中具有思路、代码、总结和心得。 大佬勿入!
300+ AC 代码 。 大数 , 线段树 , 字符串 , dp.....
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
杭电ACMhdu1163
HDU1059的代码
hdu1001解题报告
hdu 1574 passed sorce
HDU的一题........HDU DP动态规
Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。 这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。...
hdu2101AC代码
hdu acm 教案 搜索入门 hdu acm 教案 搜索入门
搜索 dfs 解题代码 hdu1241
hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。
hdu acm 教案 动态规划(1) hdu acm 教案 动态规划(1)