链接:
题意
皇后可以攻击与它在同一条线上的棋子(同行/同列/主副对角线),但是中途不能有遮挡
给定一个局面,多个皇后和一个国王,求有几个皇后能攻击到国王
解:
暴力搜八个方向
实际代码:
#include
using namespace std;
vector> queensAttacktheKing(vector>& queens, vector& king)
{
vector>tmap(8,vector(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>ans;
for(int i=0;i<8;i++)
{
pairtemp(king[0],king[1]);
while(true)
{
pairnext;
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