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

POJ 1178 Camelot Floyd算法+枚舉

Description

Centuries ago, King Arthur and the Knights of the Round Table used to meet every year on New Year's Day to celebrate their fellowship. In remembrance of these events, we consider a board game for one player, on which one king and several knight pieces are placed at random on distinct squares.
The Board is an 8x8 array of squares. The King can move to any adjacent square, as shown in Figure 2, as long as it does not fall off the board. A Knight can jump as shown in Figure 3, as long as it does not fall off the board.

During the play, the player can place more than one piece in the same square. The board squares are assumed big enough so that a piece is never an obstacle for other piece to move freely.
The player抯 goal is to move the pieces so as to gather them all in the same square, in the smallest possible number of moves. To achieve this, he must move the pieces as prescribed above. Additionally, whenever the king and one or more knights are placed in the same square, the player may choose to move the king and one of the knights together henceforth, as a single knight, up to the final gathering point. Moving the knight together with the king counts as a single move.

Write a program to compute the minimum number of moves the player must perform to produce the gathering.

Input

Your program is to read from standard input. The input contains the initial board configuration, encoded as a character string. The string contains a sequence of up to 64 distinct board positions, being the first one the position of the king and the remaining ones those of the knights. Each position is a letter-digit pair. The letter indicates the horizontal board coordinate, the digit indicates the vertical board coordinate.

0 <= number of knights <= 63

Output

Your program is to write to standard output. The output must contain a single line with an integer indicating the minimum number of moves the player must perform to produce the gathering.

Sample Input

D4A3A8H1H8

Sample Output

10

Source


    棋盤上有1個(gè)國(guó)王和若干個(gè)騎士,要把國(guó)王和每個(gè)騎士移動(dòng)到同一個(gè)格子內(nèi),問需要移動(dòng)的最小步數(shù)是多少。如果國(guó)王和騎士走到同一個(gè)格子里,可以由騎士帶著國(guó)王一起移動(dòng)。
    枚舉棋盤上的64個(gè)點(diǎn)作為終點(diǎn),對(duì)于每一個(gè)假定的終點(diǎn),再枚舉這64個(gè)點(diǎn)作為國(guó)王和某個(gè)騎士相遇的點(diǎn),最后求出需要移動(dòng)的最小步數(shù)。其中根據(jù)騎士和國(guó)王移動(dòng)的特點(diǎn)可以預(yù)處理出從1個(gè)點(diǎn)到另外1個(gè)點(diǎn)所需的最小移動(dòng)次數(shù),也可用搜索。
#include <iostream>
using namespace std;

const int inf = 100000;
char str[150];
int k[64],king[64][64],knight[64][64];
int move1[8][2]={-1,-1,-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1};
int move2[8][2]={-1,-2,-2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2};

void init(){
    
int i,j,x,y,tx,ty;
    
for(i=0;i<64;i++)
        
for(j=0;j<64;j++)
            
if(i==j) king[i][j]=knight[i][j]=0;
            
else king[i][j]=knight[i][j]=inf;
    
for(i=0;i<64;i++){
        x
=i/8,y=i%8;
        
for(j=0;j<8;j++){
            tx
=x+move1[j][0],ty=y+move1[j][1];
            
if(tx>=0 && ty>=0 && tx<8 && ty<8)
                king[i][
8*tx+ty]=1;
        }

    }

    
for(i=0;i<64;i++){
        x
=i/8,y=i%8;
        
for(j=0;j<8;j++){
            tx
=x+move2[j][0],ty=y+move2[j][1];
            
if(tx>=0 && ty>=0 && tx<8 && ty<8)
                knight[i][
8*tx+ty]=1;
        }

    }

}

void floyd1(){
    
int i,j,k;
    
for(k=0;k<64;k++)
        
for(i=0;i<64;i++)
            
for(j=0;j<64;j++)
                
if(king[i][k]+king[k][j]<king[i][j])
                    king[i][j]
=king[i][k]+king[k][j];
}

void floyd2(){
    
int i,j,k;
    
for(k=0;k<64;k++)
        
for(i=0;i<64;i++)
            
for(j=0;j<64;j++)
                
if(knight[i][k]+knight[k][j]<knight[i][j])
                    knight[i][j]
=knight[i][k]+knight[k][j];
}

int main(){
    
int i,j,l,cnt,pos,sum,ans,len,t1,t2;
    init();
    floyd1();
    floyd2();
    
while(scanf("%s",str)!=EOF){
        len
=strlen(str);
        pos
=(str[0]-'A')+(str[1]-'1')*8;
        cnt
=(len-2)/2;
        
if(cnt==0){
            printf(
"0\n");
            
continue;
        }

        
for(i=0,j=2;i<cnt;i++,j+=2)
            k[i]
=(str[j]-'A')+(str[j+1]-'1')*8;
        
for(ans=inf,i=0;i<64;i++){
            
for(sum=l=0;l<cnt;l++)
                sum
+=knight[k[l]][i];
            
for(j=0;j<64;j++){
                t1
=king[pos][j];
                
for(t2=inf,l=0;l<cnt;l++)
                    t2
=min(t2,knight[k[l]][j]+knight[j][i]-knight[k[l]][i]);
                ans
=min(ans,sum+t1+t2);
            }

        }

        printf(
"%d\n",ans);
    }

    
return 0;
}

posted on 2009-07-02 23:57 極限定律 閱讀(2371) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ACM/ICPC

<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(10)

隨筆分類

隨筆檔案

友情鏈接

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲日韩视频| 国产精品乱码妇女bbbb| 久久久久久久久久久久久久一区| 亚洲国产日韩一区二区| 亚洲欧美一区二区三区久久| 国产夜色精品一区二区av| 欧美成人一区二区三区在线观看| 在线天堂一区av电影| 美女主播一区| 亚洲一区二区免费看| 狠狠久久亚洲欧美专区| 欧美日韩免费观看一区二区三区 | 欧美先锋影音| 久久久久久久久综合| 日韩视频在线免费观看| 久久一区二区三区四区| 一二三四社区欧美黄| 激情久久久久久久| 国产精品国产三级国产专区53 | 老司机免费视频一区二区| 99re6这里只有精品视频在线观看| 国产精品一区三区| 欧美日韩日日骚| 能在线观看的日韩av| 亚洲欧美视频在线| 亚洲美女电影在线| 欧美电影专区| 久久久久久久久蜜桃| 一区二区三区四区精品| 1024成人网色www| 国产欧美日韩在线观看| 欧美日本乱大交xxxxx| 老司机午夜精品视频在线观看| 亚洲综合精品一区二区| 亚洲精品在线免费| 欧美韩日一区二区| 久久久久久久综合狠狠综合| 亚洲一本大道在线| 99热在线精品观看| 亚洲高清自拍| 亚洲成人资源| 在线观看的日韩av| 国产一区二区三区精品久久久| 国产精品久久久久久久7电影| 欧美啪啪成人vr| 欧美成人福利视频| 久久综合伊人77777蜜臀| 久久久国产精品一区二区中文| 午夜视黄欧洲亚洲| 午夜精品视频在线观看| 亚洲欧美日韩另类| 亚洲嫩草精品久久| 午夜精品一区二区三区在线播放| 亚洲性色视频| 亚洲综合色丁香婷婷六月图片| 亚洲少妇一区| 亚洲午夜激情免费视频| 一区二区三区毛片| 亚洲一区欧美二区| 亚洲欧美日韩精品| 香蕉久久夜色精品国产| 欧美在线观看一区二区| 欧美中文在线免费| 久久久久九九视频| 麻豆国产va免费精品高清在线| 久久综合网hezyo| 蜜臀久久久99精品久久久久久| 每日更新成人在线视频| 欧美激情一区二区三区成人| 欧美久久电影| 国产精品乱子久久久久| 国产亚洲综合在线| 在线看片一区| 亚洲精品一区二区网址| 99国产精品久久| 亚洲免费在线播放| 久久久久.com| 欧美国产日产韩国视频| 99pao成人国产永久免费视频| 亚洲午夜久久久久久久久电影院| 亚洲综合久久久久| 久久婷婷一区| 欧美日韩美女| 国产区在线观看成人精品| 在线播放中文一区| 日韩视频精品在线| 午夜精品久久久久久99热软件| 久久美女性网| 亚洲人成久久| 亚洲欧美三级伦理| 久久综合国产精品| 国产精品va在线播放我和闺蜜| 国产偷久久久精品专区| 亚洲黄色一区| 午夜日韩福利| 亚洲成色www8888| 亚洲一区二区高清视频| 乱人伦精品视频在线观看| 欧美日韩免费精品| 好看的av在线不卡观看| 一本色道久久加勒比精品| 欧美在线视频网站| 亚洲福利视频网站| 亚洲欧美另类国产| 欧美精品三级| 伊人久久亚洲美女图片| 亚洲午夜av在线| 欧美99在线视频观看| 亚洲无亚洲人成网站77777| 久久人人97超碰人人澡爱香蕉| 国产精品国产三级国产普通话三级| 怡红院精品视频| 亚洲欧美综合另类中字| 亚洲第一免费播放区| 欧美一区二区三区精品| 欧美日韩一区综合| 亚洲精品视频一区| 久久久水蜜桃| 午夜国产精品影院在线观看| 欧美日韩免费在线观看| 亚洲国产精品电影| 久久久久九九九| 亚洲综合成人婷婷小说| 欧美日韩精品一区二区三区四区 | 一区二区三区久久| 欧美成人一二三| 在线播放日韩专区| 久久久精品日韩欧美| 亚洲午夜一级| 国产精品扒开腿做爽爽爽视频 | 欧美专区第一页| 一区二区三区国产精华| 欧美伦理在线观看| 亚洲国产成人porn| 久久久激情视频| 亚洲一区在线看| 国产精品国产三级国产专播品爱网| 亚洲乱码国产乱码精品精98午夜| 免费不卡在线观看av| 久久精品国产99| 国产一区二区久久久| 久久久久久9999| 午夜精品视频| 国产婷婷97碰碰久久人人蜜臀| 欧美影院久久久| 欧美一区激情| 国产一区二区精品| 久久久美女艺术照精彩视频福利播放 | 亚洲精品久久嫩草网站秘色| 欧美gay视频| 久久婷婷成人综合色| 伊人婷婷久久| 欧美国产日韩在线观看| 麻豆成人在线播放| 亚洲精品一二三区| 亚洲美女淫视频| 欧美精品在线一区| 亚洲视频你懂的| 一本一本久久a久久精品综合麻豆| 欧美日韩国产成人在线观看| 亚洲一区二区视频| 亚洲一区二区三区色| 国产精品一区二区三区乱码| 久久精彩视频| 久久久久久久久久久一区| 亚洲国产99精品国自产| 亚洲国产日韩美| 欧美三区不卡| 欧美伊人久久久久久午夜久久久久 | 久久久亚洲人| 亚洲狼人综合| 亚洲私人影院在线观看| 国产九九精品| 免费在线看成人av| 欧美激情一区在线观看| 亚洲免费在线| 久久久精品一区二区三区| 亚洲人成在线播放网站岛国| 日韩网站在线看片你懂的| 国产精品一区亚洲| 欧美成人激情视频免费观看| 欧美另类高清视频在线| 香蕉成人啪国产精品视频综合网| 欧美综合77777色婷婷| 亚洲人成在线观看| 亚洲伊人观看| 最近中文字幕日韩精品| 亚洲特色特黄| 亚洲国产成人久久综合一区| 99国产精品久久久| 黄色成人av在线| 夜夜嗨网站十八久久|