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

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>
            国产一区二区三区无遮挡| 国产精品盗摄一区二区三区| 黑人巨大精品欧美黑白配亚洲| 中文日韩在线| 一区二区日韩| 国产精品日韩在线观看| 久久精品一区蜜桃臀影院| 久久爱另类一区二区小说| 狠狠色综合一区二区| 欧美mv日韩mv国产网站app| 欧美成人性生活| 亚洲一级片在线看| 亚洲欧美国产高清| 亚洲福利视频专区| 亚洲国语精品自产拍在线观看| 美女主播精品视频一二三四| 99re6这里只有精品| 亚洲一区二区三区在线视频| 黄色成人av| 亚洲麻豆av| 国产一区久久| 亚洲精品一品区二品区三品区| 国产精品麻豆va在线播放| 久久久久久久久综合| 欧美激情欧美激情在线五月| 亚洲综合精品| 蜜桃久久av一区| 亚洲在线视频一区| 久久亚洲风情| 欧美一区二区三区精品电影| 免费成年人欧美视频| 欧美一区二区三区日韩| 欧美国产一区二区在线观看| 久久成年人视频| 欧美黄色一区二区| 久久亚洲精品欧美| 国产精品免费小视频| 亚洲高清视频的网址| 国产手机视频精品| 99视频一区二区| 亚洲国产综合在线| 久久不射网站| 欧美一区二区三区免费大片| 欧美片在线播放| 欧美成人黄色小视频| 国产日韩欧美综合精品| 99精品国产在热久久| 亚洲欧洲在线免费| 久久精品国产免费看久久精品| 亚洲欧美国产三级| 欧美日韩精品免费观看视频完整 | 亚洲大片精品永久免费| 一区二区三区日韩精品视频| 91久久久国产精品| 久久亚洲影音av资源网| 欧美影视一区| 国产精品美女久久| 99精品视频免费观看视频| 亚洲肉体裸体xxxx137| 久久亚洲国产成人| 久久综合中文色婷婷| 国产一在线精品一区在线观看| 亚洲无限av看| 午夜国产精品视频免费体验区| 欧美午夜精品伦理| 一区二区冒白浆视频| 亚洲视频一区二区免费在线观看| 欧美日本精品一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲三级观看| 欧美日韩大片| 一区二区日韩欧美| 欧美亚洲免费| 国产一区二区三区黄| 久久久久久电影| 欧美xart系列高清| 亚洲国产精品一区二区第四页av| 猫咪成人在线观看| 亚洲三级免费电影| 亚洲影院在线观看| 国产日韩欧美成人| 久久精品三级| 亚洲国产精品美女| 中文日韩电影网站| 国产亚洲成精品久久| 久久久久久9999| 亚洲激情在线播放| 午夜精品久久久久久久久久久久 | 狠狠入ady亚洲精品| 久久人人97超碰精品888 | 在线视频亚洲欧美| 国产精品欧美经典| 久久久精品欧美丰满| 亚洲欧洲一区二区三区久久| 亚洲一区网站| 在线观看欧美日韩| 欧美日韩高清在线| 欧美一进一出视频| 亚洲娇小video精品| 欧美在线日韩精品| 亚洲经典视频在线观看| 欧美香蕉大胸在线视频观看| 久久精品国产欧美激情| 亚洲精品一区二区三区福利| 久久精品成人欧美大片古装| 亚洲黄色在线| 国产日韩欧美不卡| 欧美伦理91| 久久久一区二区三区| 99在线精品视频在线观看| 另类天堂视频在线观看| 亚洲免费中文| 亚洲麻豆av| 在线看片欧美| 国产欧美精品在线| 欧美日韩情趣电影| 久久成年人视频| 激情成人av| 国产精品sm| 欧美另类亚洲| 久久青青草综合| 欧美一区亚洲二区| 亚洲最新中文字幕| 亚洲三级影院| 麻豆freexxxx性91精品| 欧美一区高清| 亚洲欧美另类久久久精品2019| 亚洲人成网站色ww在线| 在线看成人片| 激情国产一区| 狠狠色综合日日| 国产精品综合色区在线观看| 欧美日韩一级片在线观看| 欧美福利视频在线观看| 久久一区二区三区四区五区| 久久成人人人人精品欧| 亚洲欧美日韩国产中文在线| 一区二区欧美日韩| av成人福利| 一区二区日韩伦理片| 亚洲乱码久久| 一区二区三区 在线观看视频| 亚洲人成毛片在线播放| 91久久精品国产91性色 | 亚洲欧洲精品一区二区三区| 狠狠操狠狠色综合网| 国内精品伊人久久久久av影院| 国产乱码精品一区二区三区忘忧草 | 亚洲人成绝费网站色www| 亚洲第一区在线| 亚洲国产日韩欧美在线99| 欧美黑人在线观看| 91久久久久久久久久久久久| 亚洲精品美女久久久久| 亚洲美女精品久久| 中文国产成人精品| 午夜一区二区三区在线观看| 性色av一区二区三区| 久久久亚洲精品一区二区三区 | 老司机aⅴ在线精品导航| 久久永久免费| 欧美人与性动交cc0o| 欧美日韩一区二区三区在线看 | 日韩视频在线播放| 中文国产亚洲喷潮| 午夜亚洲性色视频| 久久久国产精品一区二区三区| 久久这里只精品最新地址| 免费亚洲电影| 亚洲激情综合| 亚洲午夜高清视频| 久久精品五月| 欧美裸体一区二区三区| 国产精品美女视频网站| 狠狠爱www人成狠狠爱综合网| 最新国产乱人伦偷精品免费网站| 正在播放欧美视频| 欧美一区日韩一区| 欧美国产一区在线| 亚洲一区二区三区高清不卡| 久久人人超碰| 欧美午夜无遮挡| 在线观看欧美黄色| 亚洲女爱视频在线| 蜜桃av综合| 亚洲一区二区三区四区中文| 久久综合色8888| 国产精品视频久久一区| 最新日韩中文字幕| 性欧美18~19sex高清播放| 亚洲夫妻自拍| 欧美自拍偷拍| 国产精品九九久久久久久久| 亚洲黄色成人网| 久久精品国产免费观看| 亚洲久久一区| 蜜臀va亚洲va欧美va天堂| 国产精品一区二区在线观看网站 | 国产精品一区三区| 日韩图片一区|