N皇后问题的改版,输入的每一行数据为一种棋盘摆放位置,其下标为列,值为行,保证每一列不重复,判断是不是该N皇后问题的解算法
只需判断当前N个棋子是否在同一行或者对角线上,判断的方法就是在输入每个棋子的位置的时候就去与前面的全部棋子比较其行是否同样或者判断行标之差的绝对值是否等于列表之差的绝对值,若是是说明不是N皇后的解,输出NO,不然输出YESspa
#include <cstdio> #include <algorithm> using namespace std; int main() { int k; scanf("%d",&k); for(int i=0;i<k;++i){ int n; scanf("%d",&n); int solution[n+1]; bool isAns = true;// 是不是N皇后的解 for(int j=1;j<=n;++j){ scanf("%d",&solution[j]); for(int x=1;x<j;++x){ if(solution[j]==solution[x]||abs(j-x)==abs(solution[x]-solution[j])){ isAns = false; break; } } } if(isAns){ printf("YES\n"); }else{ printf("NO\n"); } } return 0; }