题目链接:

https://vjudge.net/problem/POJ-1122

题目大意:

给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路口之间没有直接路径,再给出火警位置所在的交叉路口 和 一个或多个消防站所处的交叉路口位置。输出要求按消防站到火警位置所需时间从小到大排列,输出信息包括消防站位置(初始位置),火警位置(目标位置),所需时间,最短路径上每个交叉路口。

思路:

由于求的是其他点到某一点的最短路,所以反向建图,然后用dijkstra求出这点到其他点的最短路即可。求出来的就是其他点到这点的最短路,还需要保存路径。输入输出有格式要求,详细看代码

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<sstream>
#define MEM(a, b) memset(a, b, sizeof(a));
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
int T, n, m, cases, tot;
int Map[maxn][maxn], d[maxn], path[maxn];
bool v[maxn];
struct node
{
int id, time;
bool operator < (const node& a)const
{
return time < a.time;
}
}a[maxn];
void dijkstra(int u)
{
for(int i = ; i <= n; i++)d[i] = INF;
d[u] = ;
memset(path, -, sizeof(path));
memset(v, , sizeof(v));
for(int i = ; i < n; i++)
{
int x, m = INF;
for(int i = ; i <= n; i++)if(!v[i] && m > d[i])m = d[x = i];
v[x] = ;
for(int i = ; i <= n; i++)
{
if(!v[i] && d[i] > d[x] + Map[x][i])
{
d[i] = d[x] + Map[x][i];
path[i] = x;
}
}
}
}
int main()
{
cin >> n;
int tot = ;
for(int i = ; i <= n; i++)
{
for(int j = ; j <= n; j++)
{
cin >> Map[i][j];
if(Map[i][j] == -)Map[i][j] = INF;
}
}
for(int i = ; i <= n; i++)
{
for(int j = i + ; j <= n; j++)swap(Map[i][j], Map[j][i]);
}
string s;
int u, v;
cin >> u;
while(cin >> v)a[tot++].id = v;
dijkstra(u);
for(int i = ; i < tot; i++)
{
a[i].time = d[a[i].id];
}
sort(a, a + tot);
printf("Org\tDest\tTime\tPath\n");
for(int i = ; i < tot; i++)
{
printf("%d\t%d\t%d\t", a[i].id, u, a[i].time);
int x = a[i].id;
while(x != -)
{
printf("%d\t", x);
x = path[x];
}
printf("\n");
}
return ;
}

最新文章

  1. 【讲义提纲】以一个实战新闻cms增删改查demo为例,给学院国创队伍培训php
  2. CDN技术发展趋势
  3. 转载的vim配置文件
  4. c++ map 的使用
  5. 数据库SQL 查询
  6. iOS在线音乐播放SZKAVPlayer(基于AVPlayer的封装)
  7. 3139:[HNOI2013]比赛 - BZOJ
  8. IOS Swizzle(hook)
  9. codeforces 710C
  10. JAVA ThreadPoolExecutor(转)
  11. USACO March. 2012
  12. 使用WCF扩展在方法调用前初始化环境
  13. Web.config 文件中的 system.webServer
  14. Jquery 选择器 特殊字符 转义字符
  15. NVMe协议1.3c(一) 概述
  16. python lxml库生成xml文件-节点命名空间问题
  17. python排序
  18. 初探ant-design(web版本二)
  19. js Map和Set
  20. .Net Discovery系列之十二-深入理解平台机制与性能影响(下)

热门文章

  1. canvas动画气球
  2. TypeScript入门(三)面向对象特性
  3. 基于hi-nginx的web开发(python篇)——动态路由和请求方法
  4. 透析thinkphp5升级版开发框架tpframe
  5. 02-Python的下载和安装_Python编程之路
  6. Anagram
  7. 自动化制作.framework
  8. Java基础学习笔记九 Java基础语法之this和super
  9. [开源] yvm - 自制Java虚拟机
  10. 咸鱼翻身beta冲刺博客集