L2-001 城市间紧急救援 (25分)(迪杰斯特拉算法)

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:

输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。

第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

输出格式:

第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。

输入样例:

4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2

输出样例:

2 60
0 1 3

代码:

思路:在迪杰斯特拉算法中判断是否修改最短路径时判断当同时出现最短距离时,哪条路上救援队的数量更多即可。(测试点2没过,希望有大佬可以给我指出错误)

#include<bits/stdc++.h>
using namespace std;int dist[501];//用于储存最短距离
int pre[501];//用于存储前一个节点
bool visit[501]={false};//用于判断是否进入最短距离
int num[501]={0};//用于记录到某个节点最短距离的路径数量
int weight[501];//用于储存救援队数量
int w[501]={0};//用于存储出发点到各点可召集救援队的数量
typedef struct enode//建立图
{int vnum;int Enum;int edges[501][501];
}MGraph;
MGraph a;
void Dijkstra(MGraph a,int v);
int main()
{cin>>a.vnum>>a.Enum;int v,u;cin>>v>>u;int i,j;for(i=0;i<a.vnum;i++){   //初始化for(j=0;j<a.vnum;j++){a.edges[i][j]=99999;}}for(i=0;i<a.vnum;i++){cin>>weight[i];}for(i=0;i<a.Enum;i++){int p,q,leng;cin>>p>>q>>leng;a.edges[p][q]=leng;a.edges[q][p]=leng;}Dijkstra(a,v);int min=99999;for(i=0;i<a.vnum;i++){if(dist[i]<min&&i!=v){min=dist[i];}}cout<<num[u]<<" "<<w[u]<<endl;stack<int> list;while(pre[u]!=-1){list.push(u);u=pre[u];}cout<<v;while(!list.empty()){cout<<" "<<list.top();list.pop();}return 0;
}
void Dijkstra(MGraph a,int v)
{fill(dist,dist+501,99999);   //将整个dist数组赋值为最大int i;num[v]=1;for(i=0;i<501;i++){pre[i]=-1;}dist[v]=0;w[v]=weight[v];for(i=0;i<a.vnum;i++){int u=-1;int min=100000;for(int j=0;j<a.vnum;j++){if(visit[j]==false&&dist[j]<min){u=j;min=dist[j];}}if(u==-1){return;}visit[u]=true;for(int j=0;j<a.vnum;j++){if(visit[j]==false&&a.edges[u][j]!=99999){if(dist[u]+a.edges[u][j]<dist[j]){dist[j]=dist[u]+a.edges[u][j];num[j]=num[u];w[j]=w[u]+weight[j];pre[j]=u;}else if(dist[u]+a.edges[u][j]==dist[j]&&w[u]+weight[j]>w[j]){num[j]+=num[u];w[j]=w[u]+weight[j];pre[j]=u;}}}}
}

L2-001 城市间紧急救援 (25分)(迪杰斯特拉算法)相关推荐

  1. 5-35 城市间紧急救援 (25分) pat 数据结构

    题目连接 https://pta.patest.cn/pta/test/15/exam/4/question/862 5-35 城市间紧急救援   (25分) 作为一个城市的应急救援队伍的负责人,你有 ...

  2. PTA7-12 城市间紧急救援 (25 分)(dijkstra+dp)(简单易懂的写法)

    PTA7-12 城市间紧急救援 (25 分) 关于这个题呢,我当时也想了很久没有一点头绪.所以,菜鸡的我一如既往的打开了CSDN(手动滑稽).我看了很多大佬的写法,最普遍的应该就是dijkstra+d ...

  3. 7-11 城市间紧急救援 (25 分)

    7-11 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速 ...

  4. 5-35 城市间紧急救援 (25分)

    5-35 城市间紧急救援 (25分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...

  5. 城市间紧急救援 (25 分)

    //迪杰斯特拉算法求城市间紧急救援 #include<iostream> #include<cstring> using namespace std; #define num ...

  6. 城市间紧急救援 (25 分)【dijkstra模板 超时原因】

    立志用最少的代码做最高效的表达 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度 ...

  7. 7-35 城市间紧急救援 (25 分)(思路加详解)

    一:题目 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城 ...

  8. 7-2 城市间紧急救援 (25 分)

    作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...

  9. 7-68 城市间紧急救援 (25 分)

    作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...

最新文章

  1. 重构第28 天 重命名bool方法(Rename boolean method)
  2. DSP中LOG_printf()和printf()区别
  3. 当析构函数遇到多线程──C++ 中线程安全的对象回调
  4. 使用 ViS2005 进行单元测试
  5. php 反序列化工具 phpggc 简介
  6. 学了python可以从事什么岗位-学完Python编程可以从事哪些岗位?
  7. python装饰器函数-【python3】 函数 装饰器
  8. Linux自动备份脚本
  9. asp.net调用js方法小结
  10. 数字电路技术可能出现的简答题_2013年9月份考试数字电子技术第二次作业
  11. Android图形---Graphics(概要)
  12. 深井软岩巷道群支护技术与应用_金能煤业公司组织观看千米深井软岩巷道大变形机理及围岩控制技术讲座...
  13. (转)SQL中WITH的用法
  14. 简练软考知识点整理-管理沟通
  15. LVS负载均衡中arp_ignore和arp_annonuce参数配置
  16. 小米笔记本linux无线网卡驱动,小米笔记本在Kali Linux下所遇问题部分解决方案
  17. (转载)yocto相关class总结
  18. pytorch高版本(如1.7.0)RuntimeError: Legacy autograd function with non-static forward method is deprecate
  19. 福禄克FLUKE TIX650红外热像仪3.5英寸高像素大屏
  20. webrtc入门:14.pion webrtc中Data Channels示例

热门文章

  1. UoW中修改VIM的配色方案
  2. [ubuntu20] hadoop3.1.2集群io测试
  3. 获取Windows7特殊文件夹的权限
  4. batocera linux树莓派,树莓派Batocera系统添加OpenBOR模拟器教程
  5. 7月全球域名总量统计排名TOP20 (美》德》中》英》加》法》日)中国名列第三
  6. /storage/emulated/0/bluetooth/Screenshot.competeordersb.png: open failed: EACCES (Permission denied)
  7. make_blobs函数
  8. ie js html 压缩,HTML、CSS、JS中常用的东西在IE中兼容问题汇总
  9. 资讯信息流场景的学习排序实践探讨
  10. IOS 第三方开源库汇总