• Knight Moves


    杭电1372

    Sample Input
    e2 e4
    a1 b2
    b2 c3
    a1 h8
    a1 h7
    h8 a1
    b1 c3
    f6 f6
     
    Sample Output
    To get from e2 to e4 takes 2 knight moves.
    To get from a1 to b2 takes 4 knight moves.
    To get from b2 to c3 takes 2 knight moves.
    To get from a1 to h8 takes 6 knight moves.
    To get from a1 to h7 takes 5 knight moves.
    To get from h8 to a1 takes 6 knight moves.
    To get from b1 to c3 takes 1 knight moves.
    To get from f6 to f6 takes 0 knight moves.
    View Code
     1 #include<stdio.h>
     2 #include<queue>
     3 using namespace std;
     4 int a[9][9];
     5 int x,y,m,n;
     6 int c[8][2]={2,1, 2,-1, -2,1, -2,-1, 1,2, -1,2, 1,-2, -1,-2};
     7 struct node
     8 {
     9     int x,y,step;
    10 };
    11     
    12 int dfs()
    13 {
    14     int k;
    15     queue<node>q;
    16     node cur,next;
    17     cur.x=x;
    18     cur.y=y;
    19     cur.step=0;
    20     q.push(cur);
    21     while(!q.empty())
    22     {
    23         cur=q.front();
    24         q.pop();
    25     
    26          
    27         for(k=0;k<8;k++)
    28         {
    29             next.x=cur.x+c[k][0];
    30             next.y=cur.y+c[k][1];
    31                 if(next.x==m&&next.y==n)
    32                     return cur.step+1;
    33             if(next.x<=0||next.y<=0||next.x>8||next.y>8||a[next.x][next.y]==1)
    34                 continue;
    35                  
    36                 next.step=cur.step+1;
    37                 q.push(next);
    38                 a[next.x][next.y]=1;
    39         
    40         }
    41     }
    42 }
    43 
    44 
    45 int main()
    46 {
    47     int b1,b2;
    48     char s1,s2;
    49     int t;
    50     while(scanf("%c",&s1)!=-1)
    51     {
    52         memset(a,0,sizeof(a));
    53         scanf("%d ",&b1);
    54         scanf("%c%d",&s2,&b2);
    55         getchar();
    56         x=s1-'a'+1;
    57         y=b1;
    58         m=s2-'a'+1;
    59         n=b2;
    60         a[x][y]=1;
    61         if(x==m&&y==n)
    62         {
    63             printf("To get from %c%d to %c%d takes %d knight moves.\n",s1,b1,s2,b2,0);
    64             continue;
    65         }
    66         else
    67             t=dfs();
    68     printf("To get from %c%d to %c%d takes %d knight moves.\n",s1,b1,s2,b2,t);
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    git 更改项目名称
    C语言 函数和程序结构 宏替换#define
    git commit
    git patch
    CortexM3/4 一些调试技巧
    PendSV和SYSTICK
    TencentOS tiny 中断嵌套
    smp raw_spinlock_t
    20212022年寒假学习进度15
    20212022年寒假学习进度22
  • 原文地址:https://www.cnblogs.com/zlyblog/p/2613238.html
Copyright © 2020-2023  润新知