• Sicily 1936. Knight Moves


    题目地址:1936. Knight Moves

    思路:

         这道题一开始不理解题意…orz...囧,看大神们理解的。

         题意是说一个8*8的国际象棋,骑士以马的形式走动(“日”字型),指定两个点,输出最小的步骤。

         可以利用广度搜索解决。

         具体代码如下:

     1 #include <iostream>
     2 #include <queue>
     3 #include <cstring>
     4 #include <string>
     5 using namespace std;
     6 
     7 int dx[] = {-1, -2, -2, -1, 1, 2, 2, 1};    //可以走八个方向
     8 int dy[] = {-2, -1, 1, 2, 2, 1, -1, -2};
     9 
    10 bool visited[100];
    11 
    12 int main() {
    13     int t;
    14     cin >> t;
    15     while (t--) {
    16         memset(visited, false, sizeof(visited));
    17         int distance[100] = {0};
    18 
    19         string node1, node2;
    20         cin >> node1 >> node2;
    21 
    22         int X = (node1[0]-'a')*8 + node1[1]-'1';
    23         int Y = (node2[0]-'a')*8 + node2[1]-'1';
    24 
    25         queue<int> store;
    26         store.push(X);
    27         while (!store.empty()) {
    28             if (store.front() == Y)
    29                 break;
    30 
    31             int x = store.front()/8;
    32             int y = store.front()%8;
    33 
    34             for (int i = 0; i < 8; i++) {
    35                 int nx = x+dx[i];
    36                 int ny = y+dy[i];
    37                 
    38                 if (nx < 0||nx > 7||ny < 0||ny > 7)
    39                     continue;
    40                 int temp = nx*8 + ny;
    41                 
    42                 if (!visited[temp]) {
    43                     store.push(temp);
    44                     visited[temp] = true;
    45                     distance[temp] = distance[store.front()] + 1;
    46                 }
    47             }
    48             store.pop();
    49         }
    50         cout << "To get from " << node1
    51              << " to " << node2 << " takes "
    52              << distance[Y] << " knight moves.
    ";
    53     }
    54     
    55     return 0;
    56 }
    57  
  • 相关阅读:
    Using F2 to Rename Open Files
    Java 浅析 Thread.join()
    JDK 8
    Automata
    The Hungarian Abhorrence Principle
    Spring 与 MyBatis 的整合
    JDK 8
    面向对象设计原则汇总
    Java Error : type parameters of <T>T cannot be determined during Maven Install
    【源码拾遗】从vue-router看前端路由的两种实现
  • 原文地址:https://www.cnblogs.com/winray/p/4152711.html
Copyright © 2020-2023  润新知