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; }