| 网站首页 | 自考 | 中考 | 高考 | MBA | 考研 | 成人高考 | 报关员 | 导游 | 司法 | 计算机 | 会计 | 英语 | 医学 | 小学 | 初中 | 高中 | 法律硕士 | 建筑工程 | 留言 | 
最新公告:     本站一直领先的专注于考试的网络媒体与服务平台,请大家互相支持!  [admin  2006年9月7日]        
 
您现在的位置: 试卷下载网 >> 计算机 >> 软件设计师 >> 文章正文
 
 
 
最新推荐 更多内容
 
 
相关文章
吉尔的又一个乘车问题
更多内容
最优乘车问题           
最优乘车问题
作者:佚名 文章来源:不详更新时间:2007-8-24 0:02:23

最优乘车问题

输入数据:输入文件INPUT.TXT。文件的第行是一个数字M1M100)表示开通了M条单向巴士线路,第2行是一个数字N1<N500),表示共有N个车站。从第3行到第M+2行依次给出了第一条到第M条巴士线路的信息。其中第i+2行给出的是第i条巴士线路的信息,从左至右依次按行行驶顺序给出了该线路上的所有站点,相邻两个站号之间用一个空格隔开。 

输出数据:输出文件是OUTPUT.TXT。文件只有一行,为最少换车次数(在01,…,M-1中取值),0表示不需换车即可达到。如果无法乘车达到S公园,则输出“NO”。

Program Travel;

var m:1..100;      {m为开通的单向巴士线路数}

    n:1..500;      {n为车站总数}

    result:array[1..501] of -1..100;  {到某车站的最少换车数}

    num:array[1..500,1..50] of 1..500;  {从某车站可达的所有车站序列}

    sum:array[1..500] of 0..50;    {从某车站可达的车站总数}

    check:array[1..500] of Boolean;  {某车站是否已扩展完}

Procedure Init;

var f1:text;

    a,b,c,d:byte;

    data:array[1..100] of 0..100;

begin

  assign(f1,'input.txt');

  reset(f1);

  readln(f1,m);

  readln(f1,n);

  result[501]:=100;

  for a:=1 to m do

  begin

    for b:=1 to 100 do data[b]:=0;

    b:=0;

    repeat

      inc(b);

      read(f1,data[b]);

    until eoln(f1);

    for c:=1 to b-1 do

      for d:=c+1 to b do

      begin

        inc(sum[data[c]]);

        num[data[c],sum[data[c]]]:=data[d];

      end;

  end;

end;

Procedure Done;

var min,a,b,c,total:integer;

begin

  fillchar(result,sizeof(result),-1);

  result[1]:=0;

  for c:=1 to sum[1] do result[num[1,c]]:=0;

  b:=data[1,1];

  repeat

    for c:=1 to sum[b] do

      if (result[num[b,c]]=-1) then result[num[b,c]]:=result[b]+1;

    min:=501;

    for c:=1 to n do if (result[c]<>-1) and (result[c]<result[min])

              then min:=c;

    b:=min;

  until result[n]<>-1;

  writeln(result[n]);{到达S公园的最少换车次数}

end;

begin

  Init;

end.


文章录入:admin    责任编辑:admin 
 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

     
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |