力扣 OJ 1222. 可以攻擊國王的皇后

題目:

在一個 8x8 的棋盤上,放置着若干「黑皇后」和一個「白國王」。

「黑皇后」在棋盤上的位置分佈用整數座標數組 queens 表示,「白國王」的座標用數組 king 表示。

「黑皇后」的行棋規定是:橫、直、斜都可以走,步數不受限制,但是,不能越子行棋。

請你返回可以直接攻擊到「白國王」的所有「黑皇后」的座標(任意順序)。

 

示例 1:

輸入:queens = [[0,1],[1,0],[4,0],[0,4],[3,3],[2,4]], king = [0,0]
輸出:[[0,1],[1,0],[3,3]]
解釋: 
[0,1] 的皇后可以攻擊到國王,因爲他們在同一行上。 
[1,0] 的皇后可以攻擊到國王,因爲他們在同一列上。 
[3,3] 的皇后可以攻擊到國王,因爲他們在同一條對角線上。 
[0,4] 的皇后無法攻擊到國王,因爲她被位於 [0,1] 的皇后擋住了。 
[4,0] 的皇后無法攻擊到國王,因爲她被位於 [1,0] 的皇后擋住了。 
[2,4] 的皇后無法攻擊到國王,因爲她和國王不在同一行/列/對角線上。
示例 2:

輸入:queens = [[0,0],[1,1],[2,2],[3,4],[3,5],[4,4],[4,5]], king = [3,3]
輸出:[[2,2],[3,4],[4,4]]
示例 3:

輸入: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]
輸出:[[2,3],[1,4],[1,6],[3,7],[4,3],[5,4],[4,5]]
 

提示:

1 <= queens.length <= 63
queens[0].length == 2
0 <= queens[i][j] < 8
king.length == 2
0 <= king[0], king[1] < 8
一個棋盤格上最多隻能放置一枚棋子。

 

代碼:

int dx[8] = { 1, 1, 0, -1, -1, -1, 0, 1 }; //flat技術
int dy[8] = { 0, 1, 1, 1, 0, -1, -1, -1 };//(dx,dy)是8個方向向量

class Solution {
public:
    int board[8][8];
    vector<vector<int>> queensAttacktheKing(vector<vector<int>>& queens, vector<int>& king) {
        memset(board,0,sizeof(board));
        for(int i=0;i<queens.size();i++)board[queens[i][0]][queens[i][1]]=1;
        vector<vector<int>>ans;
        for(int i=0;i<8;i++)
        {
            int x=king[0],y=king[1];
            while(x>=0 && x<8 && y>=0 && y<8)
            {
                if(board[x][y])
                {
                    vector<int>tmp;
                    tmp.insert(tmp.end(),x);
                    tmp.insert(tmp.end(),y);
                    ans.insert(ans.end(),tmp);
                    break;
                }
                x+=dx[i],y+=dy[i];
            }
        }
        return ans;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章