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

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>
            欧美色图麻豆| 国产精品视频免费| 亚洲精品日韩在线| 亚洲黄色影片| 欧美精品一区二区三区一线天视频| 最新国产の精品合集bt伙计| 亚洲黄色影片| 国产精品久久久久7777婷婷| 久久精品国产99国产精品| 久久久久成人网| 日韩天堂在线观看| 亚洲一区三区视频在线观看| 黑人一区二区| 91久久中文| 国产日韩精品电影| 亚洲国产毛片完整版| 国产精品亚洲精品| 卡一卡二国产精品| 欧美日本韩国一区| 久久久99国产精品免费| 欧美激情 亚洲a∨综合| 欧美影院成年免费版| 美女啪啪无遮挡免费久久网站| 亚洲一区二区视频在线| 久久精品欧美| 亚洲欧美日韩在线观看a三区| 久久久久久综合网天天| 亚洲女同同性videoxma| 狼人天天伊人久久| 欧美专区亚洲专区| 欧美日韩免费一区二区三区视频| 久久精品视频在线看| 欧美日韩亚洲一区二| 另类尿喷潮videofree| 国产精品久久久久久久午夜 | 亚洲级视频在线观看免费1级| 一二三区精品| 91久久精品国产91久久性色tv| 亚洲欧美国产日韩中文字幕| 亚洲免费不卡| 美女脱光内衣内裤视频久久网站| 性做久久久久久免费观看欧美| 欧美另类女人| 欧美激情亚洲激情| 黄色一区二区三区四区| 亚洲欧美在线一区二区| 亚洲影院在线观看| 欧美日韩国产电影| 亚洲福利视频免费观看| 在线观看av不卡| 久久久www成人免费无遮挡大片| 欧美在线观看视频一区二区三区| 欧美精品亚洲一区二区在线播放| 欧美顶级少妇做爰| 亚洲国产天堂久久综合| 久久综合五月天婷婷伊人| 久久噜噜亚洲综合| 韩国av一区二区三区在线观看| 亚洲欧美精品一区| 欧美一区二区在线看| 国产精品成人aaaaa网站| 999亚洲国产精| 亚洲一区二区三区乱码aⅴ| 欧美日韩亚洲不卡| 中文欧美在线视频| 午夜精品影院| 国产亚洲欧美激情| 欧美一区二区免费| 久久午夜羞羞影院免费观看| 激情丁香综合| 免费不卡在线观看av| 亚洲国产美国国产综合一区二区| 亚洲美女视频在线免费观看| 欧美日韩美女在线| 99热免费精品| 久久成人在线| 亚洲国产黄色| 欧美日韩一二三四五区| 亚洲图片欧美日产| 久久人人97超碰精品888| 在线观看日韩| 欧美日韩国产精品自在自线| 亚洲性感美女99在线| 久久久久久久成人| 亚洲精品在线免费| 国产精品美女久久久免费 | 欧美国产精品久久| av成人免费在线观看| 国产精品视频导航| 老司机午夜精品| 99re热这里只有精品视频| 欧美在线观看你懂的| 最新国产成人av网站网址麻豆| 欧美精品1区2区| 欧美亚洲一区| 亚洲精品中文在线| 久久嫩草精品久久久精品一| 日韩视频不卡| 国内视频一区| 欧美日韩国产片| 久久精品免费| 一区二区三区欧美| 麻豆精品一区二区综合av| 亚洲图色在线| 亚洲第一页中文字幕| 国产精品私人影院| 欧美激情在线播放| 久久国产福利| 宅男噜噜噜66国产日韩在线观看| 久热精品视频在线观看| 亚洲影院免费| 91久久视频| 黄色成人在线网址| 国产精品激情| 欧美伦理影院| 免费国产一区二区| 久久精品色图| 午夜精品久久久久久久99热浪潮| 亚洲欧洲一区二区三区久久| 久久视频在线视频| 欧美一区二区高清在线观看| 日韩午夜在线| 亚洲欧洲日产国码二区| 韩国视频理论视频久久| 国产精品亚洲片夜色在线| 欧美精品在线免费观看| 久久亚洲国产精品一区二区| 久久99伊人| 久久成人精品无人区| 亚洲欧美成人一区二区在线电影| 99视频超级精品| 亚洲精品婷婷| 亚洲精品美女在线观看| 亚洲福利专区| 亚洲电影免费观看高清完整版| 牛牛精品成人免费视频| 美女国内精品自产拍在线播放| 久久精品91久久久久久再现| 欧美亚洲网站| 久久国产精品免费一区| 欧美影院视频| 久久久99国产精品免费| 久久久久久久尹人综合网亚洲| 久久精品视频导航| 久久免费高清视频| 美女诱惑一区| 亚洲成色www8888| 91久久午夜| 一本一本久久| 午夜在线一区| 久久精品免费看| 欧美xart系列高清| 欧美日本国产在线| 国产精品久久久久久久久久ktv| 国产精品日韩精品欧美精品| 国产精自产拍久久久久久蜜| 国产一区二区黄| 影音先锋日韩有码| 亚洲美女毛片| 欧美一区二区福利在线| 久久这里只有| 91久久精品美女高潮| 中文av一区二区| 亚洲欧美综合| 女仆av观看一区| 欧美性猛交99久久久久99按摩| 国产伦一区二区三区色一情| 一区二区在线不卡| 中文精品视频| 久久久久国内| 亚洲精一区二区三区| 午夜视频一区| 欧美精品一区在线| 国产亚洲人成a一在线v站| 最新国产乱人伦偷精品免费网站| av不卡在线| 久久精品国产亚洲aⅴ| 亚洲第一精品夜夜躁人人爽| 亚洲视频1区| 免费成人高清视频| 国产精品试看| 亚洲人成欧美中文字幕| 欧美在线关看| 亚洲精选成人| 另类av导航| 国产日韩精品在线播放| 99xxxx成人网| 理论片一区二区在线| 亚洲天堂免费观看| 欧美国产一区二区三区激情无套| 国产啪精品视频| 亚洲视频久久| 亚洲国产视频一区| 久久人人97超碰精品888| 国产精品呻吟| 亚洲综合日韩中文字幕v在线| 欧美韩日一区二区| 久久久久久高潮国产精品视| 国产精品专区第二| 亚洲一区影院|