链接:
1222. 可以攻击国王的皇后
题意
皇后可以攻击与它在同一条线上的棋子(同行/同列/主副对角线),但是中途不能有遮挡
给定一个局面,多个皇后和一个国王,求有几个皇后能攻击到国王
解:
暴力搜八个方向
实际代码:
#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> queensAttacktheKing(vector<vector<int>>& queens, vector<int>& king)
{vector<vector<int>>tmap(8,vector<int>(8,0));for(auto row:queens) tmap[row[0]][row[1]]=1;int move[9][2]={ {-1,-1},{-1,0},{-1,+1},{0,+1},{+1,+1},{+1,0},{+1,-1},{0,-1},};vector<vector<int>>ans;for(int i=0;i<8;i++){pair<int,int>temp(king[0],king[1]);while(true){pair<int,int>next;next.first=temp.first+move[i][0];next.second=temp.second+move[i][1];if(next.first<0||next.first>=8) break;if(next.second<0||next.second>=8) break;if(tmap[next.first][next.second]==1){ans.push_back({next.first,next.second});break;}temp=next;}}return ans;
}
限制:
1 <= queens.length <= 63
queens[i].length == 2
0 <= queens[i][j] < 8
king.length == 2
0 <= king[0], king[1] < 8
- 一个棋盘格上最多只能放置一枚棋子。