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

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 飛飛 閱讀(2732) 評論(1)  編輯 收藏 引用 所屬分類: ACM/ICPC

FeedBack:
# re: 迭代加深搜索
2008-07-04 20:08 | wzc1989
謝謝大牛分享?。。?nbsp; 回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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成人免费观看| 最新中文字幕亚洲| 午夜精品国产精品大乳美女| 久久三级福利| 欧美伦理在线观看| 国产欧美高清| 亚洲另类在线视频| 久久精品导航| 欧美激情在线免费观看| 99国产精品视频免费观看| 欧美日韩在线视频观看| 国外成人网址| 亚洲一区日韩在线| 欧美成人一品| 亚洲欧美激情一区二区| 免费不卡在线视频| 国产欧美精品在线播放| 久久久欧美一区二区| 亚洲精品乱码久久久久久蜜桃91| 欧美日韩精品一区二区天天拍小说| 激情欧美一区二区| 亚洲欧美韩国| 亚洲精品国产精品久久清纯直播| 欧美日韩免费看| 亚洲精品欧美在线| 欧美www视频| 久久国产日本精品| 国产精品一区二区久久| 99re66热这里只有精品4| 免费在线亚洲| 国产精品久久久久一区| 夜夜嗨av一区二区三区网站四季av| 中日韩男男gay无套| 欧美日韩日日骚| 久久这里有精品视频| 新片速递亚洲合集欧美合集| 一区二区三区精品久久久| 免费成年人欧美视频| 午夜精品久久久久久99热软件 | 欧美日韩日韩| 久久久久久有精品国产| 欧美日韩视频免费播放| 欧美韩日一区二区| 国产色产综合产在线视频| 亚洲专区在线视频| 蜜桃av一区| 久久精品国产精品亚洲综合| 欧美日韩 国产精品| 国产在线视频不卡二| 久久九九全国免费精品观看| 亚洲欧美日韩在线| 中文有码久久| 欧美精品在线观看一区二区| 看片网站欧美日韩| 欧美激情中文字幕在线| 夜夜嗨av一区二区三区| 美日韩精品免费观看视频| 国内久久精品| 性18欧美另类| 久久精品免费看| 国产亚洲一区在线| 欧美专区日韩视频| 亚洲国产精品久久久久秋霞不卡 | 一区二区成人精品 | 亚洲国产成人久久| 欧美激情在线狂野欧美精品| 另类天堂av| 国语自产精品视频在线看8查询8| 亚洲综合精品自拍| 性刺激综合网| 免费亚洲电影在线观看| 亚洲视频在线观看三级| 欧美日韩亚洲天堂| 一区二区三区不卡视频在线观看| 一区二区三区欧美激情| 欧美午夜久久久| 狂野欧美一区| 亚洲黄色成人| 午夜国产精品影院在线观看| 午夜精品亚洲| 亚洲第一黄色网| 亚洲日本va午夜在线影院| 在线视频欧美日韩| 久久本道综合色狠狠五月| 欧美gay视频| 亚洲精品在线观| 激情综合色综合久久| 久久综合久久综合这里只有精品| 亚洲在线观看视频| 国产亚洲人成a一在线v站| 久久久精品日韩| 欧美一区二区三区四区在线| 欧美成人精品在线| 久久婷婷影院| 最新中文字幕亚洲| 国产精品久久久久久久久久久久久久 | 亚洲国产日韩欧美在线动漫| 男女视频一区二区| 亚洲综合日韩在线| 雨宫琴音一区二区在线| 亚洲一区二区三区中文字幕| 欧美国产综合视频| 久久久天天操| 99视频在线精品国自产拍免费观看 | 久久色在线观看| 一区二区三区视频在线观看 | 亚洲精品在线视频观看| 国产精品入口夜色视频大尺度| 亚洲福利精品| 香蕉久久精品日日躁夜夜躁| 亚洲国产精品久久久久| 国产精品视频网站| 欧美激情无毛| 久久精品天堂| 亚洲性线免费观看视频成熟| 亚洲一区视频在线| 亚洲国产精品成人综合| 国产欧美日韩一区二区三区| 欧美激情亚洲一区| 久久久亚洲欧洲日产国码αv| 久久久久99| 亚洲欧美日韩中文视频| 日韩午夜电影av| 亚洲三级网站| 在线观看av一区| 国产一区二区无遮挡| 国产精品视频区| 国产精品国产一区二区| 欧美女同在线视频| 欧美电影美腿模特1979在线看| 午夜久久电影网| 亚洲一区二区在线视频| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲视频视频在线| 99综合视频| 99视频日韩| 夜夜狂射影院欧美极品| 亚洲免费观看高清完整版在线观看熊| 激情综合五月天| 精品91在线| 在线观看精品| 亚洲第一免费播放区| 欧美日本在线播放| 欧美精品v日韩精品v国产精品 | 久久久99久久精品女同性 | 欧美不卡在线| 免费成年人欧美视频| 99re66热这里只有精品4| 亚洲欧洲综合| 99视频有精品| 亚洲一区免费看| 欧美一区二区三区四区视频| 欧美在线亚洲一区| 久久频这里精品99香蕉| 免费亚洲电影| 亚洲激情视频在线播放| 99国产精品国产精品久久| 一本色道88久久加勒比精品| 亚洲一区二区三区久久| 午夜国产精品影院在线观看| 久久精品亚洲一区二区| 老司机成人网| 欧美日韩在线精品一区二区三区| 国产精品扒开腿做爽爽爽视频| 国产美女一区| 在线欧美三区| 亚洲手机成人高清视频| 欧美亚洲在线| 欧美电影电视剧在线观看| 亚洲毛片一区二区| 亚洲欧美日韩视频二区| 久久综合狠狠| 亚洲韩国一区二区三区| 麻豆精品在线视频| 亚洲区第一页| 性欧美大战久久久久久久免费观看| 久久成人精品无人区| 女人天堂亚洲aⅴ在线观看| 日韩午夜中文字幕| 亚洲国内自拍| 午夜精品久久久久久久99热浪潮 | 在线亚洲一区观看| 久久精品国产免费观看| 欧美女同视频| 一区在线播放视频| 亚洲一二三区精品| 亚洲狼人精品一区二区三区| 性欧美大战久久久久久久免费观看| 免费日韩av| 午夜视频一区二区| 欧美日韩国产丝袜另类| 在线欧美日韩| 久久xxxx| 亚洲午夜在线观看| 欧美激情精品久久久久久久变态 |