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

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 飛飛 閱讀(2731) 評論(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>
            亚洲电影免费观看高清完整版| 91久久久久久| 久久av一区| 欧美一区激情| 黄色精品一区二区| 欧美国产一区二区| 欧美精品一区二区三区四区| 一本大道久久a久久综合婷婷| 亚洲乱码久久| 国产精品午夜视频| 久久在线免费| 欧美极品一区| 欧美一级一区| 免费观看国产成人| 亚洲欧美日本国产有色| 久久成人免费电影| 日韩视频在线观看| 亚洲欧美国产va在线影院| 尤物九九久久国产精品的分类| 欧美激情欧美激情在线五月| 欧美少妇一区| 欧美成人一品| 国产精品久久毛片a| 欧美国产精品va在线观看| 欧美日韩一区二区三区免费看| 久久国产精品久久精品国产| 欧美成黄导航| 久久精品一区二区三区中文字幕| 六月天综合网| 欧美在线免费| 欧美精品九九99久久| 久久久久久亚洲精品杨幂换脸 | 久久精品国产亚洲5555| 久久资源av| 亚洲欧美日韩精品久久久| 久久久青草婷婷精品综合日韩| 在线亚洲一区观看| 久久婷婷国产综合国色天香| 亚洲午夜激情网页| 久久综合影音| 久久久久久久精| 欧美午夜在线视频| 亚洲欧洲三级| 狠狠久久亚洲欧美专区| 亚洲一级黄色av| 日韩小视频在线观看专区| 久久av红桃一区二区小说| 亚洲一级在线| 欧美日韩1区2区| 亚洲电影在线免费观看| 狠狠色丁香久久婷婷综合丁香| 亚洲视频精选| 亚洲午夜女主播在线直播| 欧美成年人视频| 另类天堂av| 国产一区二区欧美| 亚洲欧美99| 亚洲自拍偷拍网址| 欧美三级电影大全| 99天天综合性| 亚洲午夜精品久久| 欧美日韩精品一区二区三区四区 | 欧美激情久久久久| 在线观看日韩一区| 久久免费少妇高潮久久精品99| 久久国产精品72免费观看| 国产模特精品视频久久久久| 亚洲网在线观看| 欧美一区二区三区日韩视频| 国产精品欧美一区二区三区奶水| 在线中文字幕不卡| 性久久久久久久久| 国产精品主播| 久久精品国产免费观看| 蜜臀91精品一区二区三区| 在线免费观看视频一区| 久久综合五月天婷婷伊人| 亚洲国产福利在线| 99视频在线观看一区三区| 欧美日韩一区高清| 亚洲一区欧美| 久久人人九九| 亚洲伦理自拍| 国产精品嫩草99a| 久久成人免费| 亚洲黄一区二区三区| 亚洲性夜色噜噜噜7777| 国产日韩欧美不卡| 另类图片综合电影| 亚洲最新合集| 久久午夜影视| 99精品视频免费观看| 国产精品稀缺呦系列在线| 久久精品亚洲一区二区| 亚洲激情成人在线| 午夜久久久久久久久久一区二区| 国产偷国产偷精品高清尤物| 免费看的黄色欧美网站| 一本色道久久综合亚洲精品小说| 久久精品日产第一区二区三区| 亚洲国产成人av| 欧美偷拍一区二区| 久久九九热免费视频| 99精品国产在热久久下载| 久久国产直播| 一区二区三区久久精品| 好吊色欧美一区二区三区四区| 欧美极品在线播放| 欧美专区在线播放| 日韩一区二区免费看| 久久综合导航| 亚洲免费中文字幕| 亚洲精品少妇网址| 国产一区二区三区免费观看| 欧美日本不卡| 美日韩精品视频| 欧美一区二区免费视频| 99re6热只有精品免费观看| 免费久久99精品国产自| 午夜精品视频网站| av不卡在线看| 亚洲人成啪啪网站| 一区二区三区在线免费播放| 国产精品人人爽人人做我的可爱| 欧美国产丝袜视频| 狼人社综合社区| 久久激情一区| 欧美在线中文字幕| 午夜精品久久久久久99热软件| 亚洲欧洲偷拍精品| 亚洲国产一区二区三区高清 | 99re6这里只有精品| 狠狠色狠狠色综合日日91app| 国产精品久99| 欧美小视频在线| 欧美日本成人| 欧美国产专区| 欧美激情一区三区| 欧美成人精品福利| 蜜臀91精品一区二区三区| 久久蜜桃资源一区二区老牛 | 欧美激情一区二区三区全黄| 久久综合久久综合久久综合| 久久高清免费观看| 久久精品91| 久久久精彩视频| 久久人人97超碰精品888| 久久九九久精品国产免费直播| 欧美一级黄色录像| 欧美中文在线字幕| 久久久久免费观看| 久久亚洲精品中文字幕冲田杏梨| 久久久久久9| 女仆av观看一区| 欧美国产精品日韩| 亚洲欧洲日产国码二区| 亚洲精品乱码久久久久久日本蜜臀 | 久久这里只有| 免费一级欧美片在线观看| 欧美福利网址| 亚洲精品一区二区网址| 99这里有精品| 欧美亚洲日本一区| 久久综合九色综合网站| 欧美绝品在线观看成人午夜影视| 欧美日韩国产小视频在线观看| 国产精品草莓在线免费观看| 国产日韩亚洲欧美| 91久久精品一区二区别| 亚洲色图综合久久| 久久久久国产精品一区| 欧美黑人国产人伦爽爽爽| 亚洲免费av网站| 午夜精品电影| 欧美成人免费网站| 国产精品久久久999| 伊人蜜桃色噜噜激情综合| 一区二区高清| 久久久亚洲国产天美传媒修理工| 欧美黄在线观看| 亚洲综合色视频| 欧美激情一区二区三级高清视频 | 国产精品激情av在线播放| 国产综合久久| 中日韩在线视频| 免费视频一区| 亚洲免费影视第一页| 另类综合日韩欧美亚洲| 国产精品一区二区男女羞羞无遮挡| 尤物精品国产第一福利三区| 亚洲欧美综合v| 亚洲二区在线视频| 午夜天堂精品久久久久 | 午夜精品免费视频| 欧美精品日韩综合在线| 在线成人www免费观看视频| 午夜国产精品视频| 亚洲激情国产| 另类亚洲自拍| 好吊视频一区二区三区四区 |