Floyd算法——保存路径——输出路径 HDU1385
2024-09-06 01:19:18
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1385
参考 http://blog.csdn.net/shuangde800/article/details/8075165
题目大意:
有N个城市,然后直接给出这些城市之间的邻接矩阵,矩阵中-1代表那两个城市无道路相连,其他值代表路径长度。
如果一辆汽车经过某个城市,必须要交一定的钱(可能是过路费)。
现在要从a城到b城,花费为路径长度之和,再加上除起点与终点外所有城市的过路费之和。
求最小花费,如果有多条路经符合,则输出字典序最小的路径。
解析:
直接跑一边Floyd算法就好 用一个二维数组保存路径path[ i ][ j ]表示第i个节点到第j个节点经过的第一个点(例如1->2->5->4,path[1][4]=2,path[2][4]=5,path[5][4]=5)
AC代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn = ;
const int maxm = 1e4+;
const int inf = 0x3f3f3f3f;
const double epx = 1e-;
typedef long long ll;
int n;
int w[maxn][maxn];
int path[maxn][maxn];
int tax[maxn];
void init()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(i!=j)
w[i][j]=inf;
else
w[i][j]=; //自己到自己设为0
path[i][j]=j; //初始化为j
}
}
}
void Floyd()
{
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(w[i][k]!=inf&&w[k][j]!=inf)
{
int temp=w[i][k]+w[k][j]+tax[k]; //tax[]是过路费
if(w[i][j]>temp) //松弛操作的时候,顺带更新路径
{
w[i][j]=temp;
path[i][j]=path[i][k];
}
else if(w[i][j]==temp&&path[i][j]>path[i][k])//字典序最小,不要求字典序的话可直接省略
{
path[i][j]=path[i][k];
}
}
}
int main()
{
while(cin>>n&&n)
{
init();
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
cin>>w[i][j];
if(w[i][j]==-)
w[i][j]=inf;
}
}
for(int i=;i<=n;i++)
cin>>tax[i];
Floyd();
int s,e;
while(cin>>s>>e&&s!=-&&e!=-)
{
printf("From %d to %d :\n",s,e);
printf("Path: ");
int u=s;
printf("%d",u); //打印路径
while(u!=e)
{
printf("-->%d",path[u][e]);
u=path[u][e];
}
printf("\n");
printf("Total cost : %d\n\n",w[s][e]);
} }
}
最新文章
- 设计模式之创建类模式大PK
- [No0000AE]在 Visual Studio 中调试 XAML 设计时异常
- 461. Hamming Distance
- nodejs 遍历数组的两种方法
- centos7配置静态ip后仍然显示动态ip
- 11.10 Taolu1234组信息汇总
- template 不能分别在.h和.cpp中定义模板
- 第一次作业---安卓开发工具Android studio发展演变
- having 子句与where区别
- 关于 jquery.showLoading 中 出现的 图标不在页面中间的问题
- QT全局热键(用nativeKeycode封装API,不跨平台)
- Team City的安装1
- MAC OS 快捷键一览
- struts2 result type的类型
- Promise,Async,await简介
- mysql数据库密码更改
- js基础--javaScript数据类型你都弄明白了吗?绝对干货
- PHP 闭包函数
- my first note
- java框架之SpringBoot(3)-日志
热门文章
- JDBC连接Oracle工具类
- 学习笔记 第十四章 使用CSS3动画
- 归并排序算法及其JS实现
- spark编译错误解决 Error:(52, 75) not found: value TCLIService
- 迅为IMX6开发板适用于HMI|车载电脑|工业控制|医疗仪器|智能家居 灵活进行产品开发平台
- [转载]iTOP-4418开发板Ubuntu系统烧写方法分享
- H5 canvas pc 端米字格 写字板
- COMMENT - 定义或者改变一个对象的评注
- 安装钩子 SetWindowsHookE
- node.js querystring类介绍