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

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>
            欧美日本一道本| 亚洲在线成人精品| 一区二区三区国产精品| 久久国产精品久久国产精品| 久久综合一区二区| 午夜影院日韩| 国产精品免费看片| 国产亚洲欧美一区二区三区| 99亚洲视频| 亚洲国产成人av好男人在线观看| 久久人人97超碰精品888| 夜夜嗨一区二区三区| 久热精品在线视频| 国模吧视频一区| 欧美专区在线观看一区| 在线视频一区观看| 欧美视频日韩| 久久亚洲视频| 亚洲国产欧美日韩另类综合| 免费久久99精品国产自在现线| 性欧美大战久久久久久久久| 国产精品尤物| 欧美在线观看你懂的| 性视频1819p久久| 国产一区二区黄| 嫩模写真一区二区三区三州| 99视频在线观看一区三区| 另类天堂av| 亚洲精品一级| 一本大道av伊人久久综合| 欧美日韩一区二区三区在线看 | 免费久久久一本精品久久区| 亚洲大胆女人| 亚洲激情在线激情| 欧美色网一区二区| 黑丝一区二区| 亚洲电影免费观看高清| 国产一区二区欧美日韩| 99精品免费网| 亚洲精品视频在线看| 久久精品一级爱片| 欧美在线观看一区二区| 欧美日韩第一区日日骚| 欧美激情久久久久| 一区二区亚洲| 欧美一区二区精品| 欧美一级夜夜爽| 国产精品成人一区二区三区夜夜夜| 女人天堂亚洲aⅴ在线观看| 国产亚洲欧美另类一区二区三区| 一区二区三区日韩欧美精品| 亚洲美女中出| 欧美理论片在线观看| 亚洲国产成人高清精品| 亚洲国产高清自拍| 久久中文欧美| 欧美激情一区二区在线 | 久久久久久久综合日本| 久久激情网站| 国产午夜精品全部视频在线播放| 亚洲男人的天堂在线观看| 午夜伦理片一区| 国产精品亚洲激情| 欧美在线视频一区二区| 久久免费黄色| 亚洲国产高清在线观看视频| 免费中文日韩| 亚洲精品视频在线观看网站| 一区二区三区日韩在线观看 | 久久这里有精品视频| 母乳一区在线观看| 亚洲激情视频在线| 欧美精品大片| 中文精品视频| 久久精品免费观看| 亚洲第一网站| 欧美日韩网站| 亚洲欧美日韩精品在线| 久久在线视频在线| 亚洲三级影片| 欧美午夜性色大片在线观看| 午夜久久美女| 欧美激情精品久久久久久蜜臀 | 国产一区二区欧美日韩| 老司机精品福利视频| 99视频精品全国免费| 欧美专区一区二区三区| 亚洲第一区在线观看| 欧美日韩一区二区三| 亚洲尤物精选| 欧美激情bt| 亚洲在线成人| 亚洲国产另类久久精品| 国产精品久久久亚洲一区 | 久久资源在线| 一区二区三区毛片| 免费成人av资源网| 亚洲欧美国产一区二区三区| 在线免费观看日本一区| 欧美日韩在线直播| 两个人的视频www国产精品| 亚洲深夜福利| 91久久黄色| 久久久噜噜噜久噜久久| 亚洲性视频h| 亚洲第一黄色| 国产亚洲精品久久久久动| 欧美精品久久一区二区| 欧美一区二区视频免费观看| 亚洲精品欧美日韩专区| 欧美成人午夜| 久久精品一区二区三区不卡牛牛| 日韩一区二区免费看| 国内精品久久久久影院优| 国产精品扒开腿爽爽爽视频| 欧美国产精品| 久久午夜电影网| 欧美一区二区视频在线观看| 亚洲无亚洲人成网站77777 | 久久视频一区二区| 亚洲欧美中文在线视频| 亚洲美女电影在线| 亚洲国产精品一区二区www在线| 国产日产高清欧美一区二区三区| 欧美日韩视频第一区| 欧美刺激性大交免费视频| 久久久福利视频| 欧美一进一出视频| 亚洲中无吗在线| 99国产欧美久久久精品| 亚洲福利久久| 欧美www视频| 欧美成人69av| 久久综合中文色婷婷| 欧美一区二区大片| 一区二区三区精品在线| 一区二区欧美日韩| 一区二区三区www| 亚洲视频网在线直播| 亚洲淫片在线视频| 午夜精品久久久| 亚洲免费在线看| 午夜视频精品| 久久久xxx| 欧美大片免费| 亚洲欧洲一区| 一区二区三区四区五区精品视频| 一二三区精品| 亚洲欧美日产图| 久久精品在线| 欧美成人综合| 欧美午夜女人视频在线| 国产午夜亚洲精品不卡| 好吊色欧美一区二区三区四区 | 国产精品亚洲不卡a| 国产在线观看91精品一区| 伊人夜夜躁av伊人久久| 亚洲精品美女久久久久| 亚洲一区三区电影在线观看| 小辣椒精品导航| 免费成人av| 99在线精品观看| 欧美在线欧美在线| 美国十次成人| 国产精品稀缺呦系列在线| 狠狠色综合色区| 一本一本久久| 久久久7777| 亚洲欧洲日产国产网站| 午夜免费日韩视频| 欧美电影打屁股sp| 国产欧美一区二区三区久久人妖| 在线观看日韩专区| 亚洲一区二三| 欧美aaaaaaaa牛牛影院| 亚洲伦理在线观看| 久久成人精品电影| 欧美日韩国产欧| 国产偷国产偷精品高清尤物| 亚洲日韩中文字幕在线播放| 亚洲欧美一区二区激情| 欧美顶级少妇做爰| 性色一区二区| 欧美午夜精品久久久久久孕妇| 精品动漫3d一区二区三区免费| 一区二区欧美精品| 男男成人高潮片免费网站| 中文日韩在线| 欧美黄色精品| 一区二区视频免费完整版观看| 亚洲欧美成人一区二区三区| 亚洲国产精品一区二区www| 午夜亚洲精品| 欧美特黄视频| 夜夜爽夜夜爽精品视频| 欧美不卡在线| 久久夜色撩人精品| 国产一区视频在线看| 亚洲欧美日韩精品久久久| 亚洲精品国产精品国自产观看浪潮 |