AcWing 1621. N 皇后问题
原题链接
简单
作者:
繁花似锦
,
2020-04-21 15:08:22
,
所有人可见
,
阅读 1081
注意此题坐标系
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
typedef pair<int,int> PII;
const int N = 1000 * 2;
bool col[N],row[N],dg[N],udg[N];
int main()
{
int t;
cin >> t;
while(t--)
{
memset(col,0,sizeof col);
memset(row,0,sizeof row);
memset(dg,0,sizeof dg);
memset(udg,0,sizeof udg);
int x,cnt; // x为行号,i为列号,从1开始
vector<PII> queen;
cin >> cnt;
for(int i=1;i<=cnt;i++)
{
cin >>x;
queen.push_back({x,i});
}
int n =cnt;
bool flag=1;
for(int i=0;i<queen.size();i++) // 枚举每个皇后
{
int x=queen[i].first,y=queen[i].second;
//cout<<x<<" "<<y<<endl;
if(!col[x] && !row[y] && !dg[y-x+n] && !udg[y+x])
{
col[x] = row[y] = dg[y-x+n] = udg[y+x] = true;
}
else
{
flag=0;
break;
}
}
if(flag) puts("YES");
else puts("NO");
}
return 0;
}
大佬 这个坐标系是咋的来的啊
看前面题解有解释的。