网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月30日漏签0天
noip吧 关注:25,162贴子:642,078
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 11回复贴,共1页
<<返回noip吧
>0< 加载中...

【求助】pascal单源最短路径程序求改

  • 只看楼主
  • 收藏

  • 回复
  • scboy1994
  • 提高三等
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
输入数据后201错误,范围溢出。。。哪位oi大牛帮我下。谢谢
program danyuan;
const n=10;
type
path=record
length:real;
pre:0..n;
end;
var
adj:array[1..n,1..n]of real;
dist:array[1..n]of path;
i,j,k,e,u,w:longint;
min:real;
procedure print(i:longint);
begin
if i=1 then write(i)
else
begin
print(dist[i].pre);
write(dist[i].pre);
end;
end;
begin
for i:=1 to n do
begin
dist[i].length:=maxint;
for j:=1 to n do
adj[i,j]:=maxint;
end;
read(v,e);
for k:=1 to e do
begin
read(i,j,w);
adj[i,j]:=w;
end;
for i:=1 to e do
begin
dist[i].length:=adj[1,i];
if dist[i].length<>maxint then dist[i].pre:=1
else dist[i].pre:=0;
end;
adj[1,1]:=1;
repeat
u:=0;
min:=maxint;
for i:=1to e do
if (adj[i,i]=0) and (dist[i].length<min) then
begin
u:=i;
min:=dist[i].length;
end;
if u<>0 then
begin
adj[u,u]:=1;
for i:=1 to e do
if (adj[i,i]=0) and (dist[i].length>dist[u].length+adj[u,i]) then
begin
dist[i].length:=dist[u].length+adj[u,i];
dist[i].pre:=u;
end;
end;
until u=0;
for i:=1 to e do
begin
print(i);
write(dist[i].length);
end;
end.


  • 贴吧用户_008PJ9J
  • 省选酱油
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
说好的空格呢


2025-06-30 07:38:37
广告
  • _喔嘞嘞
  • NOI银牌
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
F7单步跟踪调试


  • scboy1994
  • 提高三等
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
什么哟~


  • scboy1994
  • 提高三等
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
运行不了。。。


  • xiaomu0214
  • NOI金牌
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
除了做初赛、第一次见人把DJ写得那么复杂的……- -||


  • Shock_L
  • 提高二等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
初始化?


  • wyl8899
  • NOI金牌
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
dijk很容易出的一个错误。
赋初值的时候是maxInt,松弛的时候由于没有判断,会出现两个maxInt相加的情况,必然爆Integer的范围。
解决的办法有两种,一个是松弛的时候加上是否是maxInt的判断,另一种是把初值设置成maxInt shr 1之类足够大又能保证不上溢的值。


2025-06-30 07:32:37
广告
  • wyl8899
  • NOI金牌
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
补充,最好不要integer,能longint就longint。
初始极大值的话随手敲个自己的八位生日也是可以的,见过某些OIer这么做的。


  • scboy1994
  • 提高三等
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个怎么改?


  • scboy1994
  • 提高三等
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
范围改大也没用,可能是输出错了,还是201。。。
program danyuan;
const n=100;
type
path=record
length:longint;
pre:0..n;
end;
var
adj:array[1..n,1..n]of longint;
dist:array[1..n]of path;
i,j,k,e,v,u,w:longint;
min:real;
procedure print(i:longint);
begin
if i=1 then write(i)
else
begin
print(dist[i].pre);
write(dist[i].pre);
end;
end;
begin
for i:=1 to n do
begin
dist[i].length:=maxint;
for j:=1 to n do
adj[i,j]:=maxint;
end;
readln(v,e);
for k:=1 to e do
begin
read(i,j,w);
adj[i,j]:=w;
end;
for i:=1 to e do
begin
dist[i].length:=adj[1,i];
if dist[i].length<>maxint then dist[i].pre:=1
else dist[i].pre:=0;
end;
adj[1,1]:=1;
repeat
u:=0;
min:=maxint;
for i:=1to e do
if (adj[i,i]=0) and (dist[i].length<min) then
begin
u:=i;
min:=dist[i].length;
end;
if u<>0 then
begin
adj[u,u]:=1;
for i:=1 to e do
if (adj[i,i]=0) and (dist[i].length>dist[u].length+adj[u,i]) then
begin
dist[i].length:=dist[u].length+adj[u,i];
dist[i].pre:=u;
end;
end;
until u=0;
for i:=1 to e do
begin
print(i);
write(dist[i].length);
end;
end.



登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 11回复贴,共1页
<<返回noip吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示