题目粗心
N皇后问题的改版,输出的每一行数据为一种棋盘摆放地位,其下标为列,值为行,保障每一列不反复,判断是否是该N皇后问题的解
算法思路
只需判断以后N个棋子是否在同一行或者对角线上,判断的办法就是在输出每一个棋子的地位的时候就去与后面的所有棋子比拟其行是否一样或者判断行标之差的绝对值是否等于列表之差的绝对值,如果是阐明不是N皇后的解,输入NO,否则输入YES
提交后果
AC代码
#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;}