青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

alpc60 ACM/ICPC程序設計
成長的路……源
posts - 20,comments - 42,trackbacks - 0

The Rotation Game

Time Limit: 15000MS

 

Memory Limit: 150000K

Total Submissions: 944

 

Accepted: 218

Description

The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see Fig.1). The blocks are marked with symbols 1, 2 and 3, with exactly 8 pieces of each kind.


Initially, the blocks are placed on the board randomly. Your task is to move the blocks so that the eight blocks placed in the center square have the same symbol marked. There is only one type of valid move, which is to rotate one of the four lines, each consisting of seven blocks. That is, six blocks in the line are moved towards the head by one block and the head block is moved to the end of the line. The eight possible moves are marked with capital letters A to H. Figure 1 illustrates two consecutive moves, move A and move C from some initial configuration.

Input

The input consists of no more than 30 test cases. Each test case has only one line that contains 24 numbers, which are the symbols of the blocks in the initial configuration. The rows of blocks are listed from top to bottom. For each row the blocks are listed from left to right. The numbers are separated by spaces. For example, the first test case in the sample input corresponds to the initial configuration in Fig.1. There are no blank lines between cases. There is a line containing a single `0' after the last test case that ends the input.

Output

For each test case, you must output two lines. The first line contains all the moves needed to reach the final configuration. Each move is a letter, ranging from `A' to `H', and there should not be any spaces between the letters in the line. If no moves are needed, output `No moves needed' instead. In the second line, you must output the symbol of the blocks in the center square after these moves. If there are several possible solutions, you must output the one that uses the least number of moves. If there is still more than one possible solution, you must output the solution that is smallest in dictionary order for the letters of the moves. There is no need to output blank lines between cases.

Sample Input

1 1 1 1 3 2 3 2 3 1 3 2 2 3 1 2 2 2 3 1 2 1 3 3
1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3
0

Sample Output

AC
2
DDHH
2

Source

Shanghai 2004

 

 

圖中的#字格的4條豎線,可以按8個方向倒轉里面的數字方塊,當中間的8個數字方塊是同一個數字時,游戲結束。這道題就要求搜索一個最短路徑,倒轉8個方向使得中間8個數字相等。這道題目看起來很像一道單純的BFS,看了POJ里面說BFS會爆內存,我沒試,估計寫得好的也爆不了。但是估計寫BFS還要涉及到狀態的判重,程序寫起來也不方便。我用了迭代加深的搜索方法。第一次接觸這個算法,我說一下我的理解:

       原來我很不理解迭代加深,搜索的深度一層一層地加,在后面的某一深度限制下搜索,必定會搜到前面深度所能搜到的結果,這會造成重復搜索。基于這點,我一直都認為迭代加深搜索的方法很冗余,當然也是自己從來都沒有動手試過。像這道題就給我的收獲不少,有的時候選擇一定的策略進行搜索,我們是很難確定解所在狀態空間的深度的,有時可能解的深度不大,但整個狀態空間的深度很大,盲目的dfs搜索在狀態空間里就有可能會越陷越深,遲遲出不了解,同時整個狀態空間的寬度也很大,用BFS可能就會爆空間。迭代加深搜索恰恰是取了一個折中。利用了dfs的優勢,限制了搜索的深度,避免了出現無解的境地。由于深度是逐個增加的,當搜到一個解后就退出,所以避免了BFS中判重的一步操作,當然在迭代深搜的過程中,還可以加入剪枝,可以優化程序。但是我的程序在POJ上還不快,還要找找原因,也許還有優化。下面是一些關鍵代碼:


for(limit=0; ;limit++)
        
{
            
if(dfs(start,0))
            
{
                
if(limit == 0)
                
{
                    printf(
"No moves needed\n");
                }

                
else
                
{
                    
for(i=0; i<limit; i++)
                    
{
                        printf(
"%c",'A'+pre[i]);
                    }

                    printf(
"\n");
                }

                printf(
"%d\n",rlt);
                
break;
            }

        }

///迭代過程
int dfs(struct S now, int depth)
{
    
int c1,c2,c3;
    struct S st;
    test(now,c1,c2,c3);
    
if(c1 == 8)
    
{
        rlt
=1;
        
return 1;
    }

    
else if(c2 == 8)
    
{
        rlt
=2;
        
return 1;
    }

    
else if(c3 == 8)
    
{
        rlt
=3;
        
return 1;
    }

    
if(depth == limit)
        
return 0;
    
if(8-c1 > limit-depth && 8-c2 > limit-depth && 8-c3 > limit-depth)
        
return 0;
    st
=NewStateA(now);
    pre[depth]
=0;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateB(now);
    pre[depth]
=1;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateC(now);
    pre[depth]
=2;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateD(now);
    pre[depth]
=3;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateE(now);
    pre[depth]
=4;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateF(now);
    pre[depth]
=5;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateG(now);
    pre[depth]
=6;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateH(now);
    pre[depth]
=7;
    
if(dfs(st,depth+1))
        
return 1;
    
return 0;
}

///深搜
posted on 2008-04-20 15:44 飛飛 閱讀(2722) 評論(1)  編輯 收藏 引用 所屬分類: ACM/ICPC

FeedBack:
# re: 迭代加深搜索
2008-07-04 20:08 | wzc1989
謝謝大牛分享!!!  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            精品88久久久久88久久久| 国产自产2019最新不卡| 欧美亚洲一区二区三区| 欧美大片第1页| 免费不卡在线视频| 国产伦精品一区二区三区免费迷| 欧美激情在线免费观看| 激情综合久久| 欧美在线亚洲在线| 欧美综合二区| 国产精品外国| 亚洲免费在线视频一区 二区| 9l视频自拍蝌蚪9l视频成人| 免费在线观看精品| 男女激情久久| 在线日韩一区二区| 久久久水蜜桃av免费网站| 久久精品视频在线看| 国产精品毛片大码女人| 亚洲一区二区三区涩| 午夜精品视频在线观看| 国产精品美女午夜av| 这里只有精品丝袜| 午夜精品免费在线| 国产精品亚洲综合色区韩国| 亚洲一区日本| 久久九九有精品国产23| 国产一区二区精品久久91| 久久精品日韩欧美| 欧美aaa级| 亚洲精品一区二区三区樱花| 欧美精品激情blacked18| 亚洲美女毛片| 欧美一区=区| 黑人一区二区| 美女国产一区| 日韩视频―中文字幕| 亚洲欧美影院| 国产真实精品久久二三区| 久久噜噜亚洲综合| 亚洲人成在线观看| 亚洲一二区在线| 国产亚洲午夜| 免播放器亚洲| 一区二区三区波多野结衣在线观看| 亚洲欧美一区二区激情| 狠狠色香婷婷久久亚洲精品| 欧美成人久久| 亚洲欧美日韩精品| 奶水喷射视频一区| 亚洲淫性视频| 亚洲二区在线观看| 国产精品白丝jk黑袜喷水| 欧美一区二区三区视频在线| 欧美成人精品一区| 亚洲女同精品视频| 一区久久精品| 欧美四级剧情无删版影片| 久久久999精品视频| 亚洲精品在线免费| 久久亚洲私人国产精品va| av成人免费| 亚洲第一网站免费视频| 国产精品久久999| 久久综合九九| 亚洲欧美中文在线视频| 91久久在线视频| 久久精品在线| 亚洲一区国产视频| 亚洲激情影视| 国内不卡一区二区三区| 国产精品v日韩精品v欧美精品网站| 久久五月天婷婷| 亚洲欧美在线免费观看| 亚洲精品日韩在线| 免费日韩成人| 久久久国产视频91| 亚洲综合电影| 日韩午夜精品| 亚洲激情社区| 伊人久久综合97精品| 国产精品久久久一本精品| 欧美华人在线视频| 久久久噜噜噜久久| 久久国产精品99国产精| 亚洲社区在线观看| 亚洲免费观看高清在线观看 | 亚洲午夜久久久久久久久电影院| 在线 亚洲欧美在线综合一区| 国产精品午夜av在线| 欧美日韩亚洲综合一区| 欧美精品日韩三级| 欧美va亚洲va国产综合| 久久亚洲私人国产精品va媚药| 欧美在线日韩| 欧美一区观看| 欧美在线免费视屏| 久久爱www.| 久久久xxx| 久久免费视频在线观看| 久久精品网址| 久久一区二区三区四区| 久久亚洲综合| 欧美超级免费视 在线| 猛男gaygay欧美视频| 麻豆精品一区二区综合av| 久久婷婷综合激情| 欧美88av| 欧美剧在线免费观看网站| 欧美区在线观看| 国产精品www994| 国产精品亚发布| 国产亚洲欧美另类一区二区三区| 国产一区二区三区免费在线观看| 国产在线精品自拍| 亚洲第一视频| 日韩一区二区高清| 亚洲一区二区精品在线| 欧美亚洲免费电影| 久久伊人免费视频| 亚洲第一精品久久忘忧草社区| 亚洲国产成人精品久久| 亚洲精品视频在线观看网站| 中文欧美在线视频| 欧美一区二区三区在线观看| 久久综合激情| 欧美日韩在线观看视频| 国产日韩在线一区| 亚洲国产99| 一区二区91| 久久大香伊蕉在人线观看热2| 老司机精品视频一区二区三区| 欧美激情视频一区二区三区免费| 一本大道久久a久久精品综合| 午夜精品美女久久久久av福利| 久久影院午夜论| 欧美涩涩视频| 伊人久久婷婷色综合98网| 国产精品99久久久久久有的能看| 欧美一级网站| 亚洲国产第一| 亚洲视频精品在线| 噜噜爱69成人精品| 国产精品久久久99| 亚洲经典视频在线观看| 亚洲欧美日韩系列| 欧美国产日韩一区二区三区| 亚洲免费激情| 久久综合色8888| 国产精品视频一| 亚洲精品视频在线观看网站| 欧美一区二区视频网站| 亚洲高清中文字幕| 欧美在线资源| 国产精品捆绑调教| 亚洲精品欧美专区| 久久免费精品视频| 在线亚洲伦理| 欧美电影在线观看| 国产在线观看91精品一区| 亚洲午夜影视影院在线观看| 你懂的视频欧美| 欧美亚洲一区在线| 国产精品激情电影| 亚洲免费福利视频| 欧美成人小视频| 久久er精品视频| 国产美女精品视频| 亚洲一区视频在线观看视频| 亚洲精华国产欧美| 美日韩精品免费观看视频| 国产香蕉久久精品综合网| 亚洲综合色自拍一区| 日韩视频免费| 欧美日韩国产色站一区二区三区| 亚洲高清一区二| 蜜桃久久av一区| 欧美自拍丝袜亚洲| 国产婷婷精品| 欧美一区二区免费观在线| 一区二区av在线| 欧美日韩国产综合视频在线观看中文 | 亚洲视频999| 欧美日韩亚洲一区二区三区在线观看| 亚洲国产精品va| 欧美大片免费久久精品三p | 国产精品久久一卡二卡| 亚洲图片激情小说| 日韩视频在线观看国产| 欧美日韩第一区日日骚| 9色porny自拍视频一区二区| 91久久精品网| 欧美精品国产精品日韩精品| 日韩一级黄色大片| 亚洲日本va午夜在线电影| 欧美日本精品| 亚洲欧美成aⅴ人在线观看| 亚洲一区精品视频| 国产欧美日韩视频一区二区| 久久国产视频网站|