标号法

标号法

    标号法是一种粹算法,更常用于找寻图的最短渠道成绩。

    一、标号法的请求:

     同一的标号,对应于图的每个顶峰的图形。。标号法可以被期望静态展现,采取促进的办法。,检测图的全部边。,无反复回溯搜索,到这地步标号法是一种粹算法。

    二、标号法的算法步骤:

     持续在类似地图的事物G,寻摸起点Vs到起点Ve的最短间隔。设:

     和(j)───顶峰Vj的标号,代表是VsVj的最短间隔。

     Vj有香味的VsVj计算了该渠道的最短渠道和胶料。。

     M(i,j)───ViVj非负胶料。

     H(j)───顶峰Vj前向杂种的。标号法的算法步骤如次:

               
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.最适当的两个顶峰暗打中间隔角镞箭负的。,才有空的标号法。 2.最适当的队列的高音部点钟杂种的是职责杂种的。,敝可以终止计算。。另外的,它不稳定的是最好的receiver 收音机。。

三、榜样解析:

 
   1.
接界序列(GDOI97四个一组之物一组之物题)

    成绩代理:

     在四周一点钟N*N(<=100)无符号完整的矩阵M,在与在M[A1B1] 开端到M[A2B2]完毕的接界序列.两个签订协议M[IJ]M[KL]毗邻的面积是下列的资格经过。:

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

     (2)I=KJ=L+-1

     职责:纵列出口矩阵M,重读K(K<=4)M[A1B1]M[A2B2]的值。每组M[A1B1]M[A2B2],求一接界序列,毗邻的签订协议I的差值的绝对的积和。

     出口体式:

     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

     解析:即使两个毗邻的的数被计算总数两个顶峰,,两个数字暗打中差值的绝对的是改正的。,成绩转变为两个顶峰的最短渠道。。设:总结,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,八位字节:

         下一步:点

         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 (F2),zz,” ”,总结〔X2〕,y2]);

     for B: = 倾斜的 1 do

     write (F2),c[b],” ”); {誊写版印刷品最大的}

     writeln (F2));

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,Gy.y]>和(x),y] then begin

                
e^.next:=g; f^.next:=e; 选出而尚未上任的:=假 答: {
衔接队列}

              
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}

     总结,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;{
将操纵倾斜的挪动一位。,杂种的的数缩减了一点钟。}

          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 (X1)>0) and (X1)<=n) and (y1>0) and (y1<=n) then

                   
begin

                        
Sj==和,Y ABS (m[x,y]-m[x1,y1]);

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

                        
begin

                              
总结〔X1〕,y1]:=sj;

                              
H[X1,y1,1]:=x; H[X1,y1,2]:=y;{
记载渠道}

                              
添加(X)1,y1,c,l); {
将新延长的杂种的出口队列中。}

                              
c:=c+1; {
杂种的数加1}

                        
end;

                   
end;

              
end;

         end;

     end;

     print;{誊写版印刷品最大的}

end;

Begin

     assign (F1),””);

     assign (F2),””);

     reset (F1)); rewrite (F2));

     readln (F1),n);

     for A:=1 to n do

     begin

          for b:=1 to
n do

            
read (F1),M[A,b]);

          readln (F1));

     end; {读入大楼}

     readln (F1),k);

     for A:=1 to k do

     begin

          ZZ:=

          readln
(F1),x1,y1,x2,y2); {
读入职责}

          try(X1),y1);

     end;

     close(F1));

     close(F2));

End.

    四、小结

     总之,标号法是静态展现的一种,采取促进的办法。,检测图的全部边。,无反复回溯搜索,这比普通的搜索说得来得多。。这是一种使最优化算法。。

     五、演习

     1.多米诺骨牌(GDSOI2000试试第二的个成绩。)

     有多米诺骨牌平的。,后面分为两面积。,每个面积的范围是空的或空的。,或被贴上加标签于16个点。现时服务台上有一排多米诺骨牌。:

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

┃┃┃┃

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

┃┃┃┃

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

     多米诺骨牌打中点和6+1+1+1=9;多米诺骨牌多米诺数积和是1+5+3+2=11.上排与下排的分别是2这种矛盾是T和之差的绝对的。。全部Domino都可以征服交换。,换句话说,山脉相当下部。,下部相当山脉。。现时的职责是。,最少周转次数,使顶行和底行暗打中差值最小。。

     在四周上述的样板,敝只需求翻转最大的一点钟多米诺骨牌。,您可以在顶部行和和弦基音行暗中停止分别。0。因而如此样板的答案是1

     出口体式:

     知识储藏处在“”中。纵列的第社交聚会是完整的。n(1<=n<=1000),表现有n被提到桌面上表达着多米诺骨牌。。总有一点钟n行,每行包括两个完整的。ab(0<=ab<=6)。第i+1行的ab代表高音部iDomino Domino的左右点。(0表现空)

     出口体式:

     知识出口到“”中。最适当的一点钟完整的。,翻转多米诺骨牌的最少次数。。

    出口出口旋转:

出口纵列:

4

6 1

1 5

1 3

1 2

出口纵列:

1

发表评论

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