zoukankan      html  css  js  c++  java
  • 1222. Queens That Can Attack the King

    问题:

    给定8*8棋盘中,queen的坐标,和king的坐标。

    king的同一行,同一列,同一对角线上的第一个queen,为可攻击king的queen

    求所有可攻击king的queen的坐标数组。

    Example 1:
    Input: queens = [[0,1],[1,0],[4,0],[0,4],[3,3],[2,4]], king = [0,0]
    Output: [[0,1],[1,0],[3,3]]
    Explanation:  
    The queen at [0,1] can attack the king cause they're in the same row. 
    The queen at [1,0] can attack the king cause they're in the same column. 
    The queen at [3,3] can attack the king cause they're in the same diagnal. 
    The queen at [0,4] can't attack the king cause it's blocked by the queen at [0,1]. 
    The queen at [4,0] can't attack the king cause it's blocked by the queen at [1,0]. 
    The queen at [2,4] can't attack the king cause it's not in the same row/column/diagnal as the king.
    
    Example 2:
    Input: queens = [[0,0],[1,1],[2,2],[3,4],[3,5],[4,4],[4,5]], king = [3,3]
    Output: [[2,2],[3,4],[4,4]]
    
    Example 3:
    Input: queens = [[5,6],[7,7],[2,1],[0,7],[1,6],[5,1],[3,7],[0,3],[4,0],[1,2],[6,3],[5,0],[0,4],[2,2],[1,1],[6,4],[5,4],[0,0],[2,6],[4,5],[5,2],[1,4],[7,5],[2,3],[0,5],[4,2],[1,0],[2,7],[0,1],[4,6],[6,1],[0,6],[4,3],[1,7]], king = [3,4]
    Output: [[2,3],[1,4],[1,6],[3,7],[4,3],[5,4],[4,5]]
     
    Constraints:
    1 <= queens.length <= 63
    queens[0].length == 2
    0 <= queens[i][j] < 8
    king.length == 2
    0 <= king[0], king[1] < 8
    At most one piece is allowed in a cell.
    

              

    解法:

    一共有8个方向,可作为要求的queen

    分别为:king 的右方→,左方←,下方↓,上方↑,左上↖️,右上↗️,左下↙️,右下↘️。

    那么构建待选数组cand

    vector<vector<int>> cand={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};

    将所有待选queens放入unordered_set中方便查找。

    分别试探以king为起始,向8个方向逐次+1距离的节点,是否在queens里面。

    在的话,加入res。

    代码参考:

     1 class Solution {
     2 public:
     3     vector<vector<int>> queensAttacktheKing(vector<vector<int>>& queens, vector<int>& king) {
     4         vector<vector<int>> cand={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};
     5         unordered_set<int> qs;
     6         vector<vector<int>> res;
     7         for(vector<int> queen:queens){
     8             qs.insert(queen[0]*8+queen[1]);
     9         }
    10         for(int i=0; i<8; i++){
    11             int x=king[0], y=king[1];
    12             while(x>=0 && x<8 && y>=0 && y<8){
    13                 if(qs.find(x*8+y)!=qs.end()){
    14                     res.push_back({x,y});
    15                     break;
    16                 }
    17                 x+=cand[i][0];
    18                 y+=cand[i][1];
    19             }
    20         }
    21         return res;
    22     }
    23 };
  • 相关阅读:
    Flutter竟然发布了1.5版本!!!!
    微软最爽命令行工具发布!
    被忽略的CSS规则
    代码精进之路读后感(六-结束篇)
    深入解析QML引擎, 第4部分: 自定义解析器
    深入解析QML引擎, 第3部分: 绑定类型
    深入解析QML引擎, 第2部分: 绑定(Bindings)
    编译V8过程全纪录
    面试总结
    Qt网络编程
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/13172440.html
Copyright © 2011-2022 走看看