L2-001 城市间紧急救援
总体上,用个Dijkstra算法
稍加修改就行
经测试,救援经过的城市不会超过50;
相同长度的路径数不会超10;
如果结构直接设个500的数组会占太多内存而崩掉
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define INF 65535
struct zlh{int vis;//是否已经找出 int u;//存路程 int g;//存一共有几条路径 int ru[10][50];//ru 这个二维数组用来存路径 int p[10];//存若干条路径的长度
};
int jc[500][500]={0};
int main(){struct zlh yu[500]={}; for(int i=0;i<=499;i++)yu[i].g=1; int a,b,m1,n1,y=0,ui[1000]={};scanf("%d%d%d%d",&a,&b,&m1,&n1); for(int i=0;i<a;i++)scanf("%d",&ui[i]);ui[999]=ui[0];ui[0]=ui[m1];ui[m1]=ui[999];for(int i=1;i<=b;i++){int u,m,r;scanf("%d%d%d",&u,&m,&r);if(!u) u=m1;//先写了以0为起点的算法,后来发现看错了 不想改,就加了个补丁. else if(u==m1) u=0;if(!m) m=m1;else if(m==m1) m=0;jc[u][m]=r;jc[m][u]=r;}for(int i=1;i<a;i++)for(int t=1;t<a;t++)jc[i][t]=!jc[i][t]||i==t?INF:jc[i][t]; for(int i=1;i<a;i++){yu[i].u=!jc[0][i]?INF:jc[0][i];} while(++y<a){int min=INF,k=0;for(int i=1;i<a;i++){if(!yu[i].vis&&yu[i].u<min){min=yu[i].u;k=i;} } for(int i=1;i<a;i++){if(yu[i].u>jc[k][i]+min){yu[i].g=yu[k].g;yu[i].u=jc[k][i]+min;for(int q=1;q<=yu[k].g;q++){yu[i].p[q]=yu[k].p[q];for(int t=0;t<=yu[k].p[q];t++)yu[i].ru[q][t]=yu[k].ru[q][t];yu[i].ru[q][++yu[i].p[q]]=k;} }else if(yu[i].u==jc[k][i]+min){for(int q=1;q<=yu[k].g;q++){yu[i].p[++yu[i].g]=yu[k].p[q];for(int t=0;t<=yu[k].p[q];t++)yu[i].ru[yu[i].g][t]=yu[k].ru[q][t];yu[i].ru[yu[i].g][++yu[i].p[yu[i].g]]=k; }}}yu[k].vis=1;}if(!n1) n1=m1;printf("%d",yu[n1].g);int se=0,sr=0;for(int i=1;i<=yu[n1].g;i++){int gh=0;for(int t=0;t<=yu[n1].p[i];t++){gh+=ui[yu[n1].ru[i][t]]; } gh+=ui[n1];if(gh>se){sr=i;se=gh;} }printf(" %d\n",se);for(int i=0;i<=yu[n1].p[sr];i++){if(yu[n1].ru[sr][i]==0) printf("%d ",m1);else if(yu[n1].ru[sr][i]==m1) printf("%d ",0);else printf("%d ",yu[n1].ru[sr][i]);}printf("%d\n",n1==m1?0:n1);
}
L2-001 城市间紧急救援相关推荐
- 5-35 城市间紧急救援 (25分) pat 数据结构
题目连接 https://pta.patest.cn/pta/test/15/exam/4/question/862 5-35 城市间紧急救援 (25分) 作为一个城市的应急救援队伍的负责人,你有 ...
- 7-15 城市间紧急救援 (10 分)
7-15 城市间紧急救援 (10 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速 ...
- pta紧急救援java,PTA——城市间紧急救援
PTA--城市间紧急救援 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在 ...
- 7-1 城市间紧急救援
7-1 城市间紧急救援 题目描述: 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路 ...
- PTA 天梯赛习题集 L2-001 城市间紧急救援
城市间紧急救援 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当 ...
- PTA7-12 城市间紧急救援 (25 分)(dijkstra+dp)(简单易懂的写法)
PTA7-12 城市间紧急救援 (25 分) 关于这个题呢,我当时也想了很久没有一点头绪.所以,菜鸡的我一如既往的打开了CSDN(手动滑稽).我看了很多大佬的写法,最普遍的应该就是dijkstra+d ...
- 7-11 城市间紧急救援 (25 分)
7-11 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速 ...
- 城市间紧急救援 (25 分)
//迪杰斯特拉算法求城市间紧急救援 #include<iostream> #include<cstring> using namespace std; #define num ...
- 城市间紧急救援(25 分)
这个题目,一开始用数组统计路径个数,在更新最短路的路径个数时总是错误,后来直接从起点回溯了一遍,就可以了, 更新最短路的时候有两个权值因素,一个是路径长度一个是数目,在路径在同一个结点的时候要选择数目 ...
- 5-35 城市间紧急救援 (25分)
5-35 城市间紧急救援 (25分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...
最新文章
- 突然想到一个可以减少fc层权重数的方法
- Thinkpad T420 指纹开机 win10 解决方案
- python操作excel-Python对Excel(*.xls)的操作
- 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用
- python3字典升序排序_Python(32)常用指引:排序指南
- java实例_图例 | Java混合模式分析之火焰图实例
- python爬虫从入门到放弃(一)之初识爬虫
- python安装opencv出现错误,通过pip安装opencv时出错
- QNNPACK高性能前向内核库全面剖析——引言篇
- 详解Django-auth-ldap 配置方法
- Linux脚本利器sed
- Sublime Text批量删除空白行
- 女生学计算机好还是工业工程好,工业工程专业排名-工业工程考证我是学IE大三的,我想问一下,工业工程,有哪些与专业 爱问知识人...
- css卷轴动画小程序,微信小程序登录页:CSS实现动画云层漂浮
- mac 自带连接ftp服务器,Mac自带FTP工具使用
- Mac下Idea快捷键总结(不断更新)
- linux下安装sqlite3
- zblog mysql修改_MySQL_网上下载的Zblog模板怎么修改?, 终于下 - phpStudy
- mysql autoenlist默认_Dapper MySql DateTime 异常
- C++学习——如何在C++中把map存入一个txtx文件