云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 信息学竞赛图论习题

信息学竞赛图论习题

  • 62 次阅读
  • 3 次下载
  • 2025/5/22 23:09:00

【输入文件】capital.in

第一行两个整数n,m(n≤100)。下面m行,每行三个整数,第i+1行的整数表示第i条高速公路连接的两个城市编号和长度(0

仅一个数,表示交通中心城市的编号

【样例数据】 【输入】capital.in 5 5 1 2 1 1 5 6 2 3 2 2 4 1 4 5 2

【输出】capital.out 2

{思路:利用FLOYD算法求出所有结点的最短路径矩阵, 然后求出每个结点到其他的结点的距离总合,取最小的那个} program capital; const

maxn=100; var

n,m,k,i,j:integer; min,sum:longint;

dist:array[1..maxn,1..maxn] of longint; {prev:array[1..maxn,1..maxn] of 0..maxn;} {因为无需知道路径,因此略去计算前驱的数组}

procedure init; var

m,i,u,v:integer; begin

assign(input,'capital.in'); reset(input);

assign(output,'capital.out'); rewrite(output); readln(n,m);

{fillchar(prev,sizeof(prev),0);} for u:=1 to n do for v:=1 to n do

dist[u,v]:=1000000000; for i:=1 to m do begin

readln(u,v,dist[u,v]);

21

dist[v,u]:=dist[u,v]; {prev[u,v]:=u; prev[v,u]:=v;} end;

{readln(s,t);} end;

procedure floyd; var

i,j,k:integer; begin

for k:=1 to n do for i:=1 to n do for j:=1 to n do

if (dist[i,k]+dist[k,j]

dist[i,j]:=dist[i,k]+dist[k,j]; {prev[i,j]:=prev[k,j];} end; end;{floyd}

{procedure print(i,j:integer); 打印路径过程也不需要 begin if i=j

then write(i)

else if prev[i,j]=0

then write('No Solution!') else begin

print(i,prev[i,j]); write('->',j); end; end;} begin init; floyd;

min:=100000000; for i:=1 to n do begin sum:=0;

for j:=1 to n do

if i<>j {自己到自己的路径不能计算在内} then sum:=sum+dist[i,j]; if min>sum then begin

min:=sum; k:=i;

22

end; end; write(k); close(input); close(output); end.

23

搜索更多关于: 信息学竞赛图论习题 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

【输入文件】capital.in 第一行两个整数n,m(n≤100)。下面m行,每行三个整数,第i+1行的整数表示第i条高速公路连接的两个城市编号和长度(0

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com