程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> csu 1459: Chess (橡棋)

csu 1459: Chess (橡棋)

編輯:C++入門知識

1459: Chess

Time Limit: 1 Sec Memory Limit: 128 MB Special Judge
Submit: 58 Solved: 31
[Submit][Status][Web Board]

Description

\

Input

\

Output

\

Sample Input

3
E 2 E 3
F 1 E 8
A 3 A 3

Sample Output

Impossible
2 F 1 B 5 E 8
0 A 3
給出起點和終點,棋盤有兩種顏色黑和白,跳的歸則是只能跳到相同的顏色格子,問能跳到終到嗎,能則輸出跳的路徑。
#include
#include
#include
using namespace std;
typedef struct nnn
{
    int x,y,step;
}NODE;
int path[100],color;
NODE node[2];
int bfs()
{
    path[node[0].y*8+node[0].x]=node[0].y*8+node[0].x;
    if(node[0].x==node[1].x&&node[0].y==node[1].y)
        return 1;
    queueq;
    NODE p,pre;
    int vist[10][10]={0};
    int dir[4][2]={1,-1,-1,1,1,1,-1,-1};
    node[0].step=0;
    vist[node[0].y][node[0].x]=1;
    q.push(node[0]);
    while(!q.empty())
    {
        pre=q.front(); q.pop();
        for(int e=0; e<4; e++)
        {
            p=pre; p.step++;
            for(int i=1; i<8; i++)
            {
                p.y=p.y+dir[e][0]*i;
                p.x=p.x+dir[e][1]*i;
                if(p.y>=0&&p.y<8&&p.x>=0&&p.x<8&&vist[p.y][p.x]==0)
                if(color==(p.y+p.x)%2)
                {
                    path[p.y*8+p.x]=pre.y*8+pre.x;
                    if(p.y==node[1].y&&p.x==node[1].x)
                        return 1;
                    vist[p.y][p.x]=1;
                    if(p.step<3)q.push(p);
                }
                p.y=p.y-dir[e][0]*i;
                p.x=p.x-dir[e][1]*i;
            }
            p.step--;
        }
    }
    return 0;
}
int main()
{
    int t,b,pp[100];
    char s[2];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s %d",s,&b);node[0].x=s[0]-'A';node[0].y=8-b;
        scanf("%s %d",s,&b);node[1].x=s[0]-'A';node[1].y=8-b;
        color=(node[0].y+node[0].x)%2;
        if(color!=(node[1].y+node[1].x)%2)
        printf("Impossible\n");
        else
        {
            int flog=bfs();
            if(flog==0)
            printf("Impossible\n");
            else
            {
                int k=0,y;
                int x=node[1].y*8+node[1].x;
                while(path[x]!=x)
                {
                    pp[k++]=x; x=path[x];
                }
                pp[k++]=x;
                printf("%d",k-1);
                for(int i=k-1;i>=0; i--)
                {
                    y=pp[i]/8; x=pp[i]%8;
                    printf(" %c %d",x+'A',8-y);
                }
                printf("\n");
            }
        }
    }
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved