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

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>
            日韩视频欧美视频| 午夜亚洲伦理| 欧美国产在线观看| 亚洲精品女av网站| 日韩视频一区二区在线观看 | 久久激情五月激情| 国内精品久久久久伊人av| 久热综合在线亚洲精品| 久久一区二区精品| 亚洲老司机av| 亚洲视频一区二区免费在线观看| 欧美视频观看一区| 久久国产精品免费一区| 久久伊人一区二区| 99国产欧美久久久精品| 一区二区日韩免费看| 国产日韩欧美麻豆| 欧美黄色大片网站| 欧美特黄一级大片| 久久综合国产精品| 欧美日韩a区| 久久久中精品2020中文| 欧美韩国日本一区| 久久激情视频免费观看| 欧美96在线丨欧| 性久久久久久久久| 欧美va亚洲va香蕉在线| 欧美在线观看一二区| 欧美成va人片在线观看| 性做久久久久久久免费看| 久久综合色88| 欧美影院视频| 欧美大片在线看| 久久人人爽人人爽| 国产精品国产一区二区| 欧美不卡三区| 国产一区二区三区免费在线观看| 亚洲国产精品一区制服丝袜 | 黄色小说综合网站| 日韩午夜三级在线| 在线免费观看日本一区| 亚洲网站在线看| 亚洲乱亚洲高清| 久久精品国产亚洲精品| 亚洲欧美日韩国产精品| 欧美大秀在线观看| 老司机一区二区三区| 国产精品美女久久福利网站| 亚洲第一天堂无码专区| 国产在线拍揄自揄视频不卡99| 日韩天堂在线观看| 亚洲欧洲日本专区| 久久精品一二三区| 久久gogo国模裸体人体| 国产精品分类| 99av国产精品欲麻豆| 亚洲三级电影全部在线观看高清| 久久国产精品色婷婷| 久久成人18免费观看| 国产精品久久久91| 一区二区三区欧美激情| 99视频精品在线| 欧美久久一级| 亚洲区国产区| 亚洲精品永久免费| 欧美成人a视频| 欧美成人嫩草网站| 亚洲国产成人精品久久| 亚洲免费视频一区二区| 午夜性色一区二区三区免费视频| 欧美视频精品在线观看| 99精品热6080yy久久| 亚洲一区日韩在线| 国产精品成人va在线观看| 一本综合久久| 欧美一级免费视频| 国产亚洲精品bt天堂精选| 欧美一区二视频在线免费观看| 久久精品国产99国产精品澳门| 国产日韩久久| 久久久久久9999| 欧美成在线观看| 日韩亚洲欧美在线观看| 欧美日韩在线直播| 亚洲一区中文字幕在线观看| 欧美亚洲一区二区在线| 精品99一区二区| 欧美激情aⅴ一区二区三区| 亚洲精品麻豆| 欧美影院视频| 亚洲欧洲一区二区在线播放 | 亚洲欧美国产视频| 久久中文字幕一区| 亚洲老板91色精品久久| 国产精品免费久久久久久| 久久国产直播| 亚洲精品久久久久| 久久精品国产亚洲精品| 亚洲国产欧美一区二区三区同亚洲 | 亚洲精品久久久蜜桃| 午夜精品久久| 最新日韩av| 国产精品女主播| 欧美jizz19hd性欧美| 亚洲一区欧美| 亚洲第一综合天堂另类专| 亚洲欧洲av一区二区| ●精品国产综合乱码久久久久| 欧美日韩国产影院| 久久精品亚洲一区二区| 999亚洲国产精| 欧美成人免费全部| 欧美一级网站| 一区二区精品国产| 在线观看欧美视频| 国产精品伊人日日| 欧美人与性动交a欧美精品| 欧美中文字幕| 亚洲一区二区三区乱码aⅴ| 欧美激情一区二区三区四区 | 一区二区不卡在线视频 午夜欧美不卡在| 国产精品美女一区二区| 欧美极品在线播放| 久久精品视频网| 在线视频中文亚洲| 最新国产拍偷乱拍精品| 蜜乳av另类精品一区二区| 午夜精品在线观看| 亚洲天堂成人| 一本色道久久综合亚洲精品高清 | 国产一区二区中文| 国产精品欧美在线| 欧美午夜剧场| 欧美日韩国产一区二区三区| 噜噜噜91成人网| 久久久免费av| 欧美专区第一页| 性欧美暴力猛交69hd| 一区二区三区四区精品| 亚洲精品视频中文字幕| 亚洲国产一区二区视频| 欧美激情视频一区二区三区在线播放| 久久久久久久精| 久久久久国产精品一区三寸| 欧美在线视频不卡| 欧美一区在线视频| 欧美一级一区| 久久精品视频在线播放| 久久久999国产| 久久一区二区三区四区| 久久夜色精品亚洲噜噜国产mv| 久久久噜噜噜久久中文字免| 久久久蜜桃精品| 美女黄毛**国产精品啪啪| 欧美第一黄网免费网站| 亚洲成色精品| 日韩视频在线观看| 中文久久乱码一区二区| 亚洲男女自偷自拍| 久久九九热免费视频| 欧美1区2区3区| 欧美色另类天堂2015| 国产精品亚洲激情| 激情久久久久久久| 亚洲精品视频啊美女在线直播| 在线视频欧美日韩| 欧美一级免费视频| 欧美大片免费观看| 日韩午夜精品| 久久精品99国产精品酒店日本| 美女主播视频一区| 国产精品多人| 精品999在线播放| 一本色道久久综合亚洲精品婷婷| 午夜精品亚洲一区二区三区嫩草| 久久久免费观看视频| 亚洲第一福利在线观看| 亚洲香蕉视频| 久久综合导航| 国产精品美女黄网| 亚洲欧洲精品一区二区三区不卡 | 久久久之久亚州精品露出| 欧美gay视频激情| 国产精品99久久久久久久久| 久久国内精品自在自线400部| 欧美黄免费看| 国产一区二区三区日韩| 一区二区欧美激情| 久久在线免费观看视频| 一区二区日韩伦理片| 久久资源在线| 国产日韩成人精品| 在线亚洲一区二区| 狼人社综合社区| 一本一道久久综合狠狠老精东影业| 久久精品国产欧美激情| 国产精品久久久久9999| 亚洲精品1区| 久久综合中文| 午夜影视日本亚洲欧洲精品|