zoukankan      html  css  js  c++  java
  • HDU 1372 (搜索方向稍有改变) Knight Moves

    其实手写模拟一个队列也挺简单的,尤其是熟练以后。

    尼玛,这题欺负我不懂国际象棋,后来百度了下,国际象棋里骑士的走法就是中国象棋里面的马

    所以搜索就有八个方向

    对了注意初始化标记数组的时候,不要把起点标记为已走过。

    因为测试数据里面有一组 f6 f6,此时样例输出的是0

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 struct Point
     8 {
     9     int x, y;
    10     int steps;
    11 }start, end, qu[100];
    12 
    13 int vis[8][8];
    14 int dir[8][2] = {{1, 2}, {-1, 2}, {1, -2}, {-1, -2}, {2, 1}, {-2, 1}, {2, -1}, {-2, -1}};
    15 char col1, col2;
    16 int row1, row2;
    17 int head, tail;
    18 
    19 bool islegal(int x, int y)
    20 {
    21     return (x>=0 && x<8 && y>=0 && y<8 && (!vis[x][y]));
    22 }
    23 
    24 void BFS(void)
    25 {
    26     head = 0, tail = 1;
    27     qu[0].x = start.x;
    28     qu[0].y = start.y;
    29     qu[0].steps = 0;
    30     while(head < tail)
    31     {
    32         if(qu[head].x == end.x && qu[head].y == end.y)
    33         {
    34             printf("To get from %c%d to %c%d takes %d knight moves.
    ", col1, row1, col2, row2, qu[head].steps);
    35             return;
    36         }
    37         for(int i = 0; i < 8; ++i)
    38         {
    39             int xx = qu[head].x + dir[i][0];
    40             int yy = qu[head].y + dir[i][1];
    41             if(islegal(xx, yy))
    42             {
    43                 qu[tail].x = xx;
    44                 qu[tail].y = yy;
    45                 qu[tail++].steps = qu[head].steps + 1;
    46                 vis[xx][yy] = 1;
    47             }
    48         }
    49         ++head;
    50     }
    51 }
    52 
    53 int main(void)
    54 {
    55     #ifdef LOCAL
    56         freopen("1372in.txt", "r", stdin);
    57     #endif
    58 
    59     while(cin >> col1 >> row1 >> col2 >> row2)
    60     {
    61         start.x = row1 - 1, start.y = col1 - 'a';
    62         end.x = row2 - 1, end.y = col2 - 'a';
    63         memset(vis, 0, sizeof(vis));
    64         BFS();
    65     }
    66     return 0;
    67 }
    代码君
  • 相关阅读:
    6种GET和POST请求发送方法
    微信公众平台开发框架推荐
    PHPExcel内存泄漏问题
    7个鲜为人知却超实用的PHP函数
    java调用C程序
    php AES加密 对应Java SHA1PRNG方式加密
    yii插入数据库防并发
    PHPUnit测试
    yii2源码学习笔记(二十)
    yii2源码学习笔记(十九)
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3916528.html
Copyright © 2011-2022 走看看