八皇后问题
问题:
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
代码1:(dfs)
#include <bits/stdc++.h> using namespace std; int a[10],num=0; bool check(int n,int i){ for(int k=1;k<n;k++) if(a[k]==i || n-k==abs(a[k]-i))return 0; return 1; } void ope(int n){ if(n>8){num++;return;} for(int i=1;i<=8;i++) if(check(n,i)){ a[n]=i; ope(n+1); } } int main() { ope(1); printf("%d\n",num); }