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

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>
            美玉足脚交一区二区三区图片| 亚洲欧美色一区| 老司机免费视频一区二区| 国产综合久久久久久鬼色| 久久久精品日韩| 久久欧美肥婆一二区| 在线日本欧美| 亚洲乱码国产乱码精品精可以看| 欧美精品福利视频| 亚洲欧洲av一区二区| 亚洲欧美中文日韩在线| 1024成人| 一本久道久久综合中文字幕| 国产女同一区二区| 久久色中文字幕| 欧美精品福利视频| 欧美在线亚洲在线| 欧美fxxxxxx另类| 亚洲一区二区网站| 久久久久成人网| 日韩小视频在线观看专区| 亚洲曰本av电影| 亚洲成人在线视频网站| 一本色道久久88综合亚洲精品ⅰ| 国产视频久久久久| 亚洲精品1区2区| 国产美女扒开尿口久久久| 欧美成人一区在线| 国产精品一区二区三区免费观看| 欧美xart系列高清| 国产精品久久久久天堂| 欧美黄色精品| 国产日韩欧美一二三区| 亚洲三级电影在线观看| 黑丝一区二区| 一区二区三区偷拍| 亚洲国产欧美日韩精品| 亚洲欧美色一区| 亚洲视频在线视频| 久久这里有精品视频| 欧美一区二区啪啪| 欧美精品1区2区| 免费在线看成人av| 国产婷婷精品| 中文精品99久久国产香蕉| 亚洲人成小说网站色在线| 新片速递亚洲合集欧美合集| 亚洲一区二区三区中文字幕在线| 蜜臀a∨国产成人精品| 久久久久国产成人精品亚洲午夜| 欧美日韩一区二区精品| 亚洲激情成人| 亚洲欧洲一区二区三区在线观看| 久久久99爱| 久久久久国产精品午夜一区| 国产精品久久久久77777| 亚洲精品永久免费| 99国产麻豆精品| 欧美国产一区视频在线观看| 欧美福利电影网| 在线 亚洲欧美在线综合一区| 欧美一区二区黄色| 久久精品国产亚洲高清剧情介绍| 国产精品日韩欧美大师| 亚洲图中文字幕| 性18欧美另类| 国产日韩亚洲欧美综合| 欧美一级一区| 久久精品水蜜桃av综合天堂| 国产一区视频在线看| 久久疯狂做爰流白浆xx| 可以看av的网站久久看| 在线观看一区| 欧美高清视频一区二区| 亚洲欧洲精品一区二区三区| 一区二区成人精品| 欧美日韩国产片| 亚洲无玛一区| 久久精品中文字幕免费mv| 伊人伊人伊人久久| 欧美成人免费在线视频| 亚洲精品乱码视频| 午夜国产不卡在线观看视频| 国产日韩专区| 老司机午夜精品视频在线观看| 亚洲高清不卡一区| 亚洲视频电影在线| 国产亚洲精品福利| 美女精品网站| 一本大道av伊人久久综合| 欧美在线影院| 亚洲国产精品一区二区第一页| 欧美寡妇偷汉性猛交| 中文一区二区在线观看| 久久久久国内| 日韩视频在线观看一区二区| 国产精品美女久久| 久久精品五月婷婷| 亚洲精品一区二区三区av| 午夜天堂精品久久久久| 亚洲国产精品成人精品| 国产精品av免费在线观看| 欧美在线免费| 日韩一区二区精品葵司在线| 久久影院午夜论| 中文亚洲欧美| 在线日韩欧美视频| 国产精品露脸自拍| 免费视频一区| 欧美一区2区三区4区公司二百| 亚洲国产视频一区| 久久久精品午夜少妇| 正在播放亚洲一区| 亚洲高清不卡在线| 国产日产精品一区二区三区四区的观看方式| 久久久五月天| 午夜精品婷婷| 一区二区三区国产精华| 欧美激情一区二区三区在线视频观看 | 免费在线视频一区| 午夜欧美精品久久久久久久| 亚洲日本中文字幕免费在线不卡| 国产日韩欧美一区二区| 欧美婷婷久久| 欧美乱人伦中文字幕在线| 久久免费视频在线| 久久av二区| 亚洲欧美另类国产| 国产精品99久久久久久人| 亚洲电影免费观看高清| 久久亚洲一区二区三区四区| 先锋亚洲精品| 欧美一级片久久久久久久| 一区二区三区欧美| 日韩一级视频免费观看在线| 亚洲国产日韩欧美在线99| 国产一区二区成人久久免费影院| 国产精品美女视频网站| 欧美视频中文字幕在线| 欧美日韩精品三区| 欧美三级特黄| 国产精品久久激情| 国产精品高潮呻吟久久av无限| 欧美精品综合| 欧美日韩亚洲国产精品| 欧美日韩综合视频网址| 欧美三级视频在线观看| 国产精品白丝av嫩草影院| 欧美日韩中文字幕日韩欧美| 国产精品hd| 国产精品免费网站在线观看| 国产精品中文字幕在线观看| 国产欧美91| 激情视频一区二区| 在线观看日韩一区| 亚洲毛片在线免费观看| 99精品国产在热久久| 亚洲午夜av在线| 性色av一区二区三区在线观看| 欧美影院一区| 美日韩丰满少妇在线观看| 欧美激情第10页| 亚洲另类黄色| 午夜精品久久99蜜桃的功能介绍| 久久精品官网| 欧美精品免费播放| 国产欧美日韩不卡免费| 亚洲电影专区| 亚洲影院免费| 免费不卡欧美自拍视频| 亚洲欧洲在线看| 亚洲一区二区不卡免费| 久久精品久久99精品久久| 免费不卡在线视频| 国产精品久久久| 在线观看亚洲精品| 亚洲素人在线| 男女激情久久| 亚洲特黄一级片| 久久久亚洲国产天美传媒修理工| 欧美精品国产一区| 国产在线一区二区三区四区| 亚洲三级电影在线观看| 欧美一区深夜视频| 亚洲国产精品一区二区第四页av| 亚洲一区二区在线看| 免费成人你懂的| 国产欧美在线观看| 夜夜爽www精品| 久久综合色影院| 亚洲无吗在线| 欧美韩国一区| 激情丁香综合| 亚洲影院免费| 亚洲精品九九| 久久综合国产精品| 国产亚洲欧美另类中文| 中国av一区| 亚洲国产综合在线看不卡| 欧美一区二区三区免费视|