[NOIP2013 提高组] 华容道

时间:2021-08-20
本文章向大家介绍[NOIP2013 提高组] 华容道,主要包括[NOIP2013 提高组] 华容道使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

这道题记录状态的思想挺好的

假如棋子在(i,j):

那么它上面空格的编号为((i-1)*4+(j-1)*4+0)

那么它下面空格的编号为((i-1)*4+(j-1)*4+1)

那么它左面空格的编号为((i-1)*4+(j-1)*4+2)

那么它右面空格的编号为((i-1)*4+(j-1)*4+3)


↑手动分割

所以俺们要记录的

①在不动棋子本身的情况下,棋子周围空格乱转的最小步数(在可行情况下)

//伪代码
(x,y)棋子位置
for i from 0 to 3
    for j from i+1 to 3
        int step=bfs((x-1)*4+(y-1)*4+i,(x-1)*4+(y-1)*4+j);
       add((x-1)*4+(y-1)*4+i,(x-1)*4+(y-1)*4+j,step);
       add((x-1)*4+(y-1)*4+j,(x-1)*4+(y-1)*4+i,step);    

②移动棋子(分为左右移动与上下运动)(在可行情况下)

//伪代码
(x,y)棋子位置
add((x-1)*4+(y-1)*4+1,x*4+(y-1)*4+0,1);//上到下 
add((x-1)*4+(y-1)*4+0,(x-2)*4+(y-1)*4+1,1);//下到上
add((x-1)*4+(y-1)*4+3,(x-1)*4+y*4+2,1);//左到右 
add((x-1)*4+(y-1)*4+2,(x-1)*4+(y-2)*4+3,1);//右到左 

求路径步骤:将空格移到起始棋子的上下左右的步数+开始最短路+在结束棋子上下左右空格中寻找答案

END

没打代码,嘿嘿(again)

原文地址:https://www.cnblogs.com/latent-Lin/p/15168200.html