题目链接 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]);
} }
}

最新文章

  1. 设计模式之创建类模式大PK
  2. [No0000AE]在 Visual Studio 中调试 XAML 设计时异常
  3. 461. Hamming Distance
  4. nodejs 遍历数组的两种方法
  5. centos7配置静态ip后仍然显示动态ip
  6. 11.10 Taolu1234组信息汇总
  7. template 不能分别在.h和.cpp中定义模板
  8. 第一次作业---安卓开发工具Android studio发展演变
  9. having 子句与where区别
  10. 关于 jquery.showLoading 中 出现的 图标不在页面中间的问题
  11. QT全局热键(用nativeKeycode封装API,不跨平台)
  12. Team City的安装1
  13. MAC OS 快捷键一览
  14. struts2 result type的类型
  15. Promise,Async,await简介
  16. mysql数据库密码更改
  17. js基础--javaScript数据类型你都弄明白了吗?绝对干货
  18. PHP 闭包函数
  19. my first note
  20. java框架之SpringBoot(3)-日志

热门文章

  1. JDBC连接Oracle工具类
  2. 学习笔记 第十四章 使用CSS3动画
  3. 归并排序算法及其JS实现
  4. spark编译错误解决 Error:(52, 75) not found: value TCLIService
  5. 迅为IMX6开发板适用于HMI|车载电脑|工业控制|医疗仪器|智能家居 灵活进行产品开发平台
  6. [转载]iTOP-4418开发板Ubuntu系统烧写方法分享
  7. H5 canvas pc 端米字格 写字板
  8. COMMENT - 定义或者改变一个对象的评注
  9. 安装钩子 SetWindowsHookE
  10. node.js querystring类介绍