B - 畅通工程续

木槿槿槿 2019-08-19 08:29:44
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。 Input 本题目包含多组数据,请处理到文件结束。 每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。 接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。 再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。 Output 对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1. Sample Input 3 3 0 1 1 0 2 3 1 2 1 0 2 3 1 0 1 1 1 2 Sample Output 2 -1 这道题用floyd模板就行。但是要注意每两个城镇之间不一定只有一条路,所以要比较一下两城镇间路的大小再存入。还有一些城镇之间可能没有联通,如果不能到达终点,存放的数值应该是最大值。这两点都注意就应该没什么问题了。 代码如下: #include"stdio.h" #include"string.h" #include"math.h" #include"stdlib.h" #include"algorithm" using namespace std; #define inf 0x3f3f3f3f int main() { int m,n; while(~scanf("%d %d",&m,&n)) { int map[105][105]; for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { if(i!=j) { map[i][j]=inf; } } map[i][i]=0; } for(int i=0;i<n;i++) { int a,b,c; scanf("%d %d %d",&a,&b,&c); if(c<map[a][b]) { map[a][b]=c; map[b][a]=c; } } int s,t;scanf("%d %d",&s,&t); for(int k=0;k<m;k++) { for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { if(map[i][k]+map[k][j]<map[i][j]) { map[i][j]=map[i][k]+map[k][j]; } } } } if(map[s][t]==inf) { printf("-1\n"); } else { printf("%d\n",map[s][t]); } } return 0; }
...全文
39 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Italink 2019-08-20
  • 打赏
  • 举报
回复
上面的代码有欠考虑

#include<iostream>
#include<vector>
using namespace std;
int main() {
const int MAX = 100000;
int n, m, a, b, c;
while (cin >> n >> m) {
vector<vector<int>> map(n, vector<int>(n, MAX));
for (int i = 0; i < m; ++i) {
cin >> a >> b >> c;
map[a][b] = map[b][a] = c;
}
cin >> a >> b;
vector<int> cost = map[a];
for (int k = 0; k < n; ++k)
for (int j = 0; j < n; ++j)
if (cost[k] + map[k][j] < cost[j])
cost[j] = cost[k] + map[k][j];
cout << (cost[b] == MAX ? -1 : cost[b]) << endl;
}
return 0;
}
Italink 2019-08-20
  • 打赏
  • 举报
回复
既然固定起点,那么就不需要用三层循环完成Floyd算法了

#include<iostream>
#include<vector>
using namespace std;
int main() {
int n, m, a, b, c;
while (cin >> n >> m) {
vector<vector<int>> map(n, vector<int>(n,-1));
for (int i = 0; i < m; ++i) {
cin >> a >> b >> c;
map[a][b] = map[b][a] = c;
}
cin >> a >> b;
vector<int> cost = map[a];
for (int k = 0; k < n; ++k)
for (int j = 0; j < n; ++j)
if (cost[k]>0&&map[k][j]>0&&cost[k] + map[k][j] < cost[j])
cost[j] = cost[k] + map[k][j];
cout << cost[b] << endl;
}
return 0;
}
木槿槿槿 2019-08-20
  • 打赏
  • 举报
回复
引用 2 楼 Italink的回复:
上面的代码有欠考虑

#include<iostream>
#include<vector>
using namespace std;
int main() {
const int MAX = 100000;
int n, m, a, b, c;
while (cin >> n >> m) {
vector<vector<int>> map(n, vector<int>(n, MAX));
for (int i = 0; i < m; ++i) {
cin >> a >> b >> c;
map[a][b] = map[b][a] = c;
}
cin >> a >> b;
vector<int> cost = map[a];
for (int k = 0; k < n; ++k)
for (int j = 0; j < n; ++j)
if (cost[k] + map[k][j] < cost[j])
cost[j] = cost[k] + map[k][j];
cout << (cost[b] == MAX ? -1 : cost[b]) << endl;
}
return 0;
}
谢谢 我只是在学它的时候做了这个题 算是对它的练习
本资料为word版本,可以直接编辑和打印,感谢您的下载 网络安全技能大赛试题 地点:__________________ 时间:__________________ 说明:本资料适用于约定双方经过谈判,协商而共同承认,共同遵守的责任与义务,仅 供参考,文档可直接下载或修改,不需要的部分可直接删除,使用时请详细阅读内容 网络安全技能大赛试题及答案 网络安全知识竞赛试题【1-10】 1、国际电信联盟将每年的5月17日确立为世界电信日,今年已经是第38届。今年世界 电信日的主题为。 A、"让全球网络更安全" B、"信息通信技术:实现可持发展的途径" C、"行动起来创建公平的信息社会" 2、信息产业部将以世界电信日主题纪念活动为契机,广泛进行宣传和引导,进一步 增强电信行业和全社会的意识。 A、国家安全 B、网络与信息安全 C、公共安全 3、为了进一步净化网络环境,倡导网络文明,信息产业部于2006年2月21日启动了持 到年底的系列活动。 A、阳光绿色网络工程 B、绿色网络行动 C、网络犯罪专项整治 4、"阳光绿色网络工程"的"阳光"寓意着光明和普惠万事万物,并要涤荡网络上的污 浊;"绿色"代表要面向未来构建充满生机的和谐网络环境;"网络"代表活动的主要内容以 网络信息服务为主;"工程"代表活动的系统性和长期性。系列活动的副主题为:倡导网络 文明,。 A、构建和谐环境 B、打击网络犯罪 C、清除网络垃圾 5、为了规范互联网电子邮件服务,依法治理垃圾电子邮件问题,保障互联网电子邮 件用户的合法权益,信息产业部于2006年2月20日颁布了,自2006年3月30日开始施行。 A、《互联网信息服务管理办法》 B、《互联网电子邮件服务管理办法》 C、《互联网电子公告服务管理规定》 6、为了防范垃圾电子邮件,互联网电子邮件服务提供者应当按照信息产业部制定的 技术标准建设互联网电子邮件服务系统,电子邮件服务器匿名转发功能。 A、使用 B、开启 C、关闭 7、互联网电子邮件服务提供者对用户的和互联网电子邮件地址负有保密的义务。 A、个人注册信息 B、收入信息 C、所在单位的信息 8、向他人发送包含商业广告内容的互联网电子邮件时,应当在电子邮件标题的前部 注明字样。 A、"推销" B、"商业信函" C、"广告"或"AD" 9、任何组织或个人不得利用互联网电子邮件从事传播淫秽色情信息、窃取他人信息 或者等违法犯罪活动,否则构成犯罪的,依法追究刑事责任,尚不构成犯罪的,由公安 机关等依照有关法律、行政法规的规定予以处罚;电信业务提供者从事上述活动的,并由 电信管理机构依据有关行政法规处罚。 A、故意传播计算机病毒 B、发送商业广告 C、传播公益信息 10、为了鼓励用户对违规电子邮件发送行为进行举报,发动全社会的监督作用,信息 产业部委托中国互联网协会设立了互联网电子邮件举报受理中心,其举报电话是010- 12321,举报电子邮箱地址为。 A、abuse@anti-spam.cn B、register@china-cic.org C、member@china-cic.org 网络安全知识竞赛试题【11-20】 11、为了依法加强对通信短信息服务和使用行为的监管,信息产业部和有关部门正在 联合制定。 A、《通信服务管理办法》 B、《通信短信息服务管理规定》 C、《短信息管理条例》 12、为了从源头上治理利用电话、手机发送诈骗、淫秽色情等各种不良和违法信息的 行为,保护广大用户的合法权益,信息产业部和有关部门正在推动工作。 A、电话用户实名制 B、畅通网络 C、"黑手机"整治 13、短信息服务提供商在开展信息订阅、短信竞猜、铃声下载等业务经营活动时,不 得进行。 A、欺诈订制 B、有偿服务 C、手机代收费 14、如果您发现自己被手机短信或互联网站上的信息诈骗后,应当及时向报案,以查 处诈骗者,挽回经济损失。 A、消费者协会 B、电信监管机构 C、公安机关 15、当您发现因短信欺诈订制被扣除信息费时,可以向相关电信运营企业投诉;投诉 未果,可进一步向申诉。 A、信息产业部或各地电信用户申诉受理中心(12300) B、中国通信企业协会 C、中国互联网协会 16、为了方便用户记忆使用、便于短信息服务提供商推广业务以及便于社会和政府监 督短信息服务提供商的经营行为,作为"阳光绿色网络工程"中的一项工作,信息产业部 将统一短信息服务提供商在不同移动运营企业的。 A、服务内容 B、服务代码 C、宣传方式 17、绿色上网软件可以自动过滤或屏蔽互联网上的,保护青少年健康成长。 A、网络游戏B、网络聊天信息 C、淫秽色情信息 18、绿色上网软件可以安装在家庭和学校的上。 A、电视机 B、个人电脑C、电话 19、信息产业部将会同中央精神文明办公室、共青团中央、教育部等部门在科学
Re:计算机网络 静态路由和动态路由协议 ======================# IP路由-网络层实现的功能:      网络畅通的条件      静态路由      路由汇总      默认路由      Windows上的路由表和默认路由      什么是动态路由      RIP协议和OSPF协议 # 网络层的功能:      只负责为数据包选择转发路径,不负责可靠传输和顺序到达 # 传输层的功能:      负责可靠传输或不可靠传输,且数据包到达后的排序 # RIP 协议 生产场景与工作原理:      静态路由存在的问题,例如有两条路径可以到达目的地,静态只配置一条路由,当出现故障的时候,路由器无法自动切换到新的链路中,因为是静态手工配置的路由!另外:如果网络环境大,采取了路由汇总或默认路由方式都难易应付量大且变化多的路由表时...! # OSPF 协议 生产场景与工作原理:      RIP协议是距离矢量协议,通过RIP协议路由器可以学习到所有网段距离以及下一跳给哪个路由器,但却不知道全网的拓扑结构(只有到了下一跳路由器,才能知道再下一跳怎样走)。RIP协议最大跳数15跳,因此不适合大规模网络。      OSPF ( Open Shortest Path First)协议是开放式最短路径优先协议,该协议是链路状态协议。OSPF协议通过路由器之间通告链路的状态来建立链路状态数据库,网络中所有路由器具有相同的链路状态数据库(所以需要划分区域,否则数据量太大了...),通过链路状态数据库就能构建出网络拓扑(即哪个路由器连接哪个路由器,以及连接的开销,带宽越高开销越低),运行OSPF协议的路由器通过网络拓扑计算到各个网络的最短路径(即开销最小的路径),路由器使用这些最短路径来构造路由表。 # 习题详解:静态路由和动态路由-----------------------------------------      

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧