请您留下宝贵的建议吧:)
广西百色高中欢迎您!

| 网站首页 | 学校概况 | 软件下载 | 图片中心 | 雁过留声 | 视频资源 | 校长信箱 | 内 部 网 |
| 同 学 录 | 网络办公 | 教学课件 | 优秀教案 | 试卷下载 | 教学素材 | 教学论文 | 电子图书 |

 
您现在的位置: 广西百色高中校园网 >> 学校概况 >> 学生频道 >> 信息技术 >> 精典程序 >> 文章正文 用户登录 新用户注册
   
   

动态规划-航线设置          【字体:
动态规划-航线设置
作者:仔仔    文章来源:本站原创    点击数:    更新时间:2006-9-26

    问题描述:美丽的莱茵河畔,每边都分布着N个城市,两边的城市都是唯一对应的友好城市,现需要在友好城市开通航线以加强往来.但因为莱茵河常年大雾,如果开设的航线发生交叉现象就有可能出现碰船的现象.现在要求近可能多地开通航线并且使航线不能相交!

   假如你是一个才华横溢的设计师,该如何设置友好城市间的航线使的航线数又最大又不相交呢?

   分析:此问题可以演化成求最大不下降序列来完成.源程序如下:

program dongtai;  {动态规划之友好城市航线设置问题}
var
 d:array[1..1000,1..4] of integer;
 i,j,k,n,L,p:integer;

 procedure print(L:integer);  {打印结果}
 begin
 writeLn('最多可设置的航线数是 : ',k);
   repeat
     writeLn(d[L,1]:4,d[L,2]:4); {输出可以设置航线的友好城市代码}
     L:=d[L,4]
   untiL L=0
 end;

begin
 writeLn('输入友好城市对数: ');
 readLn(n);
 writeLn('输入友好城市对(友好城市放在同一行:'); {输入}
 for i:=1 to n do
    readLn(d[i,1],d[i,2]);  {D[I,1]表示起点,D[I,2]表示终点}
 for i:=1 to n do
    begin
       d[i,3]:=1;  {D[I,3]表示可以设置的航线条数}
       d[i,4]:=0   {D[I,4]表示后继,即下一条航线从哪里开始设置,为0表示不能设置下一条航线}
    end;
for i:=n-1 downto 1 do  {从倒数第二个城市开始规划}
   begin
     L:=0;  p:=0;  {L表示本城市后面可以设置的航线数,P表示下条航线从哪个城市开始}
     for j:=i+1 to n do  {找出本城市后面可以设置的最大航线数和小条航线到底从哪个城市开始设置}
       if (d[i,2]L) then 
                                                {如果本城市I的终点小于后面城市的终点(即不相交)}                                      {并且此城市后面可以设置的航线数大于L}
          begin
            L:=d[j,3];   {那么L等于城市J的可以设置航线数}
            p:=j         {P等于可以设置下条航线的城市代码}
          end;
     if L>0 then   {如果本城市后面总共可以设置的航线数>0则}
         begin
           d[i,3]:=L+1;  {本城市可以设置的航线数在下个城市可以设置航线数的基础上加1}
           d[i,4]:=p     {D[I,4]等于本城市后续城市的代码}
         end
   end;
   k:=d[1,3];  {K为可以设置最大航线数,假设初值为第一个城市可以设置的航线数}
   L:=1;       {L为城市代码,初值为第一个城市}
   for i:=2 to n do  {找出可以设置航线的最大值,赋值给K,同时L记下哪个可以设置最大航线数的城市代码}
     if d[i,3]>k then
        begin
          k:=d[i,3];
          L:=i
        end;
   for i:=1 to n do  {打印结果,因为有可能有多种方案,所以只要哪个城市可以设置的航线数等于最大值K就打印结果}
     if d[i,3]=k then print(i)

end.

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

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
          最新热点       最新推荐       相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

       
     
     
     
    广西百色高中欢迎您!   网站地图 | 联系站长 | 友情链接 | 用户排行 | 版权申明 | 管理登录
    版权所有 Copyright© 2005-2010 广西百色高中 (桂ICP备05013955号)
    学校地址:广西百色市城乡路93号 电话号码:0776-2824142 传真:0776-2847293 邮政编码:533000
    站    长:覃钧  QQ:75331465            改版时间:2007年8月20日