1348.com法

            1348.com法是一种最适宜保持健康算法,图的最短途径成绩。

            一、1348.com法的运动:

             相同的1348.com,对应于图的每个顶峰的数字。1348.com法可以被期望静态伸出,采取正向法。,检测图形的全部边缘的,无反复的回译性SERC,故1348.com法是一种最适宜保持健康算法。

            二、1348.com法的算法流动:

             现存的图片G,寻觅起端Vs到起点Ve的最短间隔。设:

             总和(J)───顶峰Vj的1348.com,它代表VsVj的最短间隔。

             Vj它被标了VsVj找到了最短途径和途径扣押。

             M(i,j)───ViVj非负扣押。

             H(j)───顶峰Vj的前趋节疤。1348.com法的算法流动列举如下:

                       
sum
s)←0

                          

                      
Vs
进入队列L

                          
     

         
—–
用力打队列L队负责人Vk—–

         |                
                                 
|

         |          Vk无论Ve——————|—计算完毕蜡纸油印机途径

         |             
N
  Y                            
|

         |                
                                 
|

         |           Vk伸开包装材料Vj           
|

         |          VkVj彼此修饰)        
|

         |           
Sj
Sum(k)+M(kj)         |

         |                    
                             
|

         |              
Sj
决不Sumj            
|

         |                      
|                              
|

         |              
Y     |    N                       
|

         |                     
|    
——————–

         |                     
|

         |                   

         |          Sumj)←Sj

         |           Hj)← Vk

         |       Vj参加队列L和队列LSum从小到大排序值

         |                   

         
—————

        注意到:1.当两个顶峰暗击中要害间隔为非负时,才可获得的1348.com法。 2.当队列的第第一包装材料是目的包装材料时,无法终止计算。要不然,可能性得不到最优解。。

        三、案件解析:

         
   1.
靠近的项序列(GDOI97第四一组之物题)

            成绩扮演:

             到第一N*N(<=100)无符号约整数矩阵M,存符合米[A1B1] 开端到米[A2B2]靠近的项紧密的序列.两个条M[IJ]M[KL]靠近的组分是执行如下保持健康经过的组分:

        (1)I=K+-1J=L

             (2)I=KJ=L+-1

             税收:来自某处记载的出口矩阵M,重行细阅K(K<=4)米[A1B1]米[A2B2]的值。每组米[A1B1]米[A2B2],求靠近项的序列,使靠近的项之差的有无上权力或权威的积和最小。

             出口体式:

             4 ───N

             1 9 6 12 ───每行N个材料,共N

             8 7 3 5

             5 9 11 11

             7 3 2 6

             2 ───K

             4 1 1 4 ───表现A1,B1A2,B2的值,共K 2 2 3 4

             出口体式:

            1 17 靠近的差有无上权力或权威的积和的最少的17

             7 5 8 7 9 6 12第一组材料的靠近的项序列。

             2 4

             7 9 11 11

             解析:条件在因此成绩中两个靠近的的数字被论点两个顶峰,两数字之差的有无上权力或权威的,如分量,那时将成绩转变为求前进波的最短途径成绩。。设:总和[I,J]起端Vs到包装材料M[I,J]的最短间隔。 H[I,J]记载包装材料M[I,J]的前趋节疤。 L要伸开的记载包装材料队列。由于街区排序慢的,因而用链表作为记载包装材料的队列的典型,西装搭配。

             参考书顺序:

        Program gdoi974;

        const 方:一大批 [1..4,1..2] of integer
=((-1,0),(0,-1),(1,0),(0,1));

        {上、下、左、右第四任职培训}

        type

        {构成释义POINT典型,流行的X,Y矩阵中包装材料的协调,NEXT用于队列击中要害后续包装材料}

            point=^note;

            note=record

                 x,Y:音节

                 下第一:点

                 end;

        var

            总和:街区 [1..100,1..100] of integer;

            M:一大批 [1..100,1..100] of integer;

            H:一大批 [1..100,1..100,1..2] of byte;

            f1,F2:译本

            a,b,x1,y1,x2,y2,n,k,zz:约整数

        procedure print;

        var

            a,b,x,y,x3,y3:integer;

            C:一大批 [1..100] of integer;

            成绩:乔治英国数学家和逻辑学家型

        begin

             成绩:=真 A:=1 C[A]:=m[x2,y2];

             x:=x2 y:=y2;

             while flag do

             begin

                  a:=a+1;
x3:=x y3:=y;

                 
x:=h[x3,y3,1]; y:=h[x3,y3,2];

                 
c[a]:=m[x,y];

                  if (x=x1)
and (y=y1) then 成绩:=假

             end;   {找到整条路,把它达成协议成第一街区C}

             writeln (二层),zz,” ”,总和[x2,y2]);

             for B:=A 下坡路 1 do

             write (二层),c[b],” ”); {蜡纸油印机归结为}

             writeln (二层));

        end;

        procedure 添加(x,y,i:约整数;var L:点)

        var

           e,f,G:点

           a,b,C:约整数

           成绩:乔治英国数学家和逻辑学家型

        begin

             new (e);

             e^.x:=x; e^.y:=y;

             if i=0 then l^.next:=e {参加队列}

             else begin

                  f:=l;
g:=f^.next; 成绩:=真

                  for A:=1 to
i do

                  begin

                      
if sum[g^.x,G^.Y]>总和[X,y] then begin

                        
e^.next:=g; f^.next:=e; 成绩:=假 A:=I {
参加队列}

                      
end;

                      
f:=f^.next; g:=f^.next;

                  end;

                  if flag then
f^.next:=e; {
参加队列}

                  end;

        end;

        procedure 尝试(XZ,yz:音节)

        var

           a,b,c,sj,x,y,x1,y1:integer;

           e,l,V:点

           成绩:乔治英国数学家和逻辑学家型

        begin

         
   fillchar
(总和,sizeof (总和),255); {
Sum值为-1}

             总和[XZ,yz]:=0设置起端Sum值为0}

             成绩:=真

             new (e); e^.x:=xz; e^.y:=yz;

             new (l); l^.next:=e; {起端进入队列}

             c:=1; {现时的队列包装材料数}

             while flag do

             begin

                  v:=l^.next;
dispose (l); {
取出第第一包装材料V}

                  l:=v;
c:=c-1;{
引路下坡路一位,包装材料数减1}

                  x:=v^.x;
y:=v^.y;

                  if (x=x2)
and (y=y2) then 成绩:=假 {
条件目的包装材料,那时完毕计算。}

                  if flag then

                  begin

                      
for A:=1 to 4 do  {
四向收缩}

                      
begin

                         
  x1:=x 方[a,1];

                           
y1:=y+fang[a,2];

                           
if (1)>0) and (1)<=n) and (y1>0) and (y1<=n) then

                           
begin

                                
Sj:=和[x,Y] 有无上权力或权威的 (m[x,y]-m[x1,y1]);

                                
if (SJ) < 总和[x1,y1]) or (总和[x1,y1]=-1) then

                                
begin

                                      
总和[x1,y1]:=sj;

                                      
高[x1,y1,1]:=x; 高[x1,y1,2]:=y;{
记载途径}

                                      
添加(x1,y1,c,l); {
排队新的伸开包装材料}

                                      
c:=c+1; {
包装材料数加一}

                                
end;

                           
end;

                      
end;

                 end;

             end;

             print;{蜡纸油印机归结为}

        end;

        Begin

             assign (发生性关系),””);

             assign (二层),””);

             reset (发生性关系)); rewrite (二层));

             readln (发生性关系),n);

             for A:=1 to n do

             begin

                  for b:=1 to
n do

                    
read (发生性关系),硕士,b]);

                  readln (发生性关系));

             end; {读入街区}

             readln (发生性关系),k);

             for A:=1 to k do

             begin

                  ZZ:=A

                  readln
(发生性关系),x1,y1,x2,y2); {
读取税收}

                  try(1),y1);

             end;

             close(发生性关系));

             close(二层));

        完毕。

            四、小结

             总之,1348.com法是静态伸出的一种,采取正向法。,检测图形的全部边缘的,无反复的回译性SERC,比普通搜索好多了。这是第一最适宜保持健康算法。。

             五、范例

             1.多米诺骨牌(GDSOI2000一试居第二位的题)

             有第一多米诺骨牌是平的。,它的香气分为左右两切开,每个零件的表层或空的,或有特征16个点。目录上有一排多米诺骨牌。:

        ┏━━┓┏━━┓┏━━┓┏━━┓

        ┃┃┃┃

        ┣━━┫┣━━┫┣━━┫┣━━┫

        ┃┃┃┃

        ┗━━┛┗━━┛┗━━┛┗━━┛

             第一排多米诺骨牌的总额6+1+1+1=9;庶生的多米诺骨牌i的电子数积和1+5+3+2=11.顶行和底行的辨别i2因此差是t和暗中差的有无上权力或权威的。。每个多米诺骨牌都可以左右翻转和左右掉换,换句话说,顶上的生产下部,下部生产顶上的。现时的税收是,最小翻转次数,最小量顶行和底行暗击中要害不同。

             到下面的案件,人们只必要翻转最初一张多米诺骨牌。,你可以把顶行和底行辨别开来0。因而因此案件的答案是1

             出口体式:

             材料仓库在“”中。记载的第参加社交聚会是integen(1<=n<=1000),快递是的n桌子有一排多米诺骨牌。那时总共同体n行,每行牵制两个约整数ab(0<=ab<=6)。第i+1行的ab辨别表现第i指路多米诺骨牌的顶部和庶生的(0表现为空)

             出口体式:

             材料出口到“”中。独自地第一约整数。,表现Domin的最小翻转次数。

            出口和出口范本:

        出口记载:

        4

        6 1

        1 5

        1 3

        1 2

        出口记载:

        1

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注