• <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>
            voip
            風(fēng)的方向
            厚德致遠(yuǎn),博學(xué)敦行!
            posts - 52,comments - 21,trackbacks - 0

            騎士問題

            Time Limit:1000MS  Memory Limit:65536K
            Total Submit:160 Accepted:71

            Description

            在一個(gè)標(biāo)準(zhǔn)8*8的國(guó)際象棋棋盤上,棋盤中有些格子可能是有障礙物的。已知騎士的初始位置和目標(biāo)位置,你的任務(wù)是計(jì)算出騎士最少需要多少步可以從初始位置到達(dá)目標(biāo)位置。
            有障礙物的格子當(dāng)然不可以到達(dá)。
            標(biāo)準(zhǔn)的8*8的國(guó)際象棋棋盤中每個(gè)格子可以用唯一的編號(hào)確定。行用1~8這8個(gè)數(shù)字一次表示,列用a~h這8個(gè)字母依次表示如a4,b5等。騎士走日字型。

            Input

            多組測(cè)試數(shù)據(jù)。
            每個(gè)測(cè)試數(shù)據(jù)的第一行是一個(gè)整數(shù)b( -1 <= b <= 62)表示棋盤中有障礙物的格子的數(shù)目,當(dāng)b=-1時(shí)表示輸入結(jié)束。
            第二行含b個(gè)不同的有障礙物的格子編號(hào),用空格隔開,當(dāng)b=0時(shí),此行為空行。
            第三行是騎士的初始格子和目標(biāo)格子的編號(hào),也用空格隔開。

            Output

            每組輸出一行格式:
            Board n: m moves
            其中n表示數(shù)據(jù)的序號(hào),m表示最少步數(shù)
            如果騎士無(wú)法到達(dá),則輸出
            Board n: not reachable

            Sample Input

            10
            c1 d1 d5 c2 c3 c4 d2 d3 d4 c5
            a1 f1
            0
            c1 b3
            2
            b3 c2
            a1 b2
            -1

             

            Sample Output

            Board 1: 7 moves
            Board 2: 1 moves
            Board 3: not reachable
                  廣度搜索!
            代碼如下:
            #include<stdio.h>
            #include
            <string.h>
            int a[8]={-2,-2,-1,-1,1,1,2,2};
            int b[8]={1,-1,2,-2,2,-2,1,-1};
            int p[2][1000];
            int s[9][9];
            int head;
            int tail;
            int count;
            int x3,y3;
            int temp;
            #define cr(x) memset(x,0,sizeof(x));
            int fun(int x,int y)
            {
                
            int x1,y1;
                
            int i;
                
            int x2,y2;
                
            while(head<tail)
                
            {
                    x1
            =p[0][head];
                    y1
            =p[1][head];
                    
            for(i=0;i<8;i++)
                    
            {
                        x2
            =x1+a[i];
                        y2
            =y1+b[i];
                        
            if(x2==x3&&y2==y3)
                        
            {
                            
            return 1;
                        }

                        
            else    if(s[x2][y2]==0&&x2>0&&y2>0&&x2<9&&y2<9)
                        
            {
                            p[
            0][tail]=x2;
                            p[
            1][tail]=y2;
                            tail
            ++;
                            s[x2][y2]
            =1;
                        }


                    }


                    
            if(head==temp)//統(tǒng)計(jì)步數(shù)
                    
            {
                        temp
            =tail-1;
                        count
            ++;
                    }

                    head
            ++;    
                }

                
            return 0;
            }

            int main()
            {
                
            int x,y;
                
            int i,j;
                
            int d;
                
            char c[2];
                
            int x1,y1;
                
            int z=0;
            while(scanf("%d",&d)!=EOF&&d!=-1)
                
            {
                    z
            ++;
                    
            for(i=1;i<9;i++)
                        
            for(j=1;j<9;j++)
                        
            {
                            s[i][j]
            =0;
                        }

                    
            for(i=0;i<d;i++)
                    
            {
                        scanf(
            "%s",c);
                        x
            =c[1]-48;
                        y
            =c[0]-96;
                        s[x][y]
            =1;
                    }

                    scanf(
            "%s",c);
                    x1
            =c[1]-48;
                    y1
            =c[0]-96;
                    scanf(
            "%s",c);
                    x3
            =c[1]-48;
                    y3
            =c[0]-96;
                    p[
            0][0]=x1;
                    p[
            1][0]=y1;
                    s[x1][y1]
            =1;
                    count
            =0;
                    head
            =0;
                    tail
            =1;
                    temp
            =0;
                    
            if(fun(x1,y1)==1)
                    
            {
                        printf(
            "Board %d: %d moves\n",z,count+1);
                    }

                    
            else
                    
            {
                        printf(
            "Board %d: not reachable\n",z);
                    }

                }


                
            return 0;
            }

            posted on 2010-09-19 10:11 jince 閱讀(335) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Questions
            哈哈哈哈哈哈
            中文字幕久久欲求不满| 国产精品久久久久久久久| 一本一道久久a久久精品综合 | 国产毛片久久久久久国产毛片 | 久久久久久国产精品无码下载 | 久久综合久久综合久久综合| 久久99精品国产麻豆婷婷| 国内精品久久久久影院亚洲| 久久精品国内一区二区三区| 欧美午夜A∨大片久久 | 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 精品久久香蕉国产线看观看亚洲| 精品一久久香蕉国产线看播放| 久久综合亚洲色HEZYO社区| 亚洲天堂久久精品| 色综合久久久久综合体桃花网| 精品无码久久久久久久久久| 无码精品久久久天天影视| 久久亚洲中文字幕精品一区四| 国内精品久久久久久99| 久久精品国产久精国产果冻传媒| 久久线看观看精品香蕉国产| 久久天堂AV综合合色蜜桃网| 伊人 久久 精品| 久久久久人妻精品一区三寸蜜桃| 国产精品久久久久久福利69堂| 狠狠综合久久AV一区二区三区| 手机看片久久高清国产日韩| 久久97久久97精品免视看秋霞| 九九久久99综合一区二区| 久久综合精品国产二区无码| 嫩草伊人久久精品少妇AV| 久久精品无码一区二区WWW| 一本久久综合亚洲鲁鲁五月天| 久久精品三级视频| 久久性生大片免费观看性| 久久91精品综合国产首页| 久久国产一区二区| 国产精品亚洲美女久久久| 亚洲午夜久久影院| 狠狠久久综合伊人不卡|