回溯算法用于遍历每一种可能,这里用的是穷举法
#include<stdio.h> #include<stdbool.h> bool a[8][8]; int sum=0; int b[8]={-1}; void dfs(int n); bool answer(int n); int main(){ dfs(0); printf("%d",sum); } void dfs(int n){ if(n==8){ if(answer(0)) sum++; return; } for(int i=0;i<8;i++){ a[n][i]=true; b[n]=i; dfs(n+1); b[n]=-1; a[n][i]=false; } } bool answer(int n){ if(n==7){ return true; } int i,j; for(i=n;i<7;i++){//检查列 if(a[i+1][b[n]]){ return false; } } for(i=n,j=b[n];i<7&&j>=1;i++,j--) {/// if(a[i+1][j-1]){ return false; } } for(i=n,j=b[n];i<7&&j<7;i++,j++){ if(a[i+1][j+1]){ return false; } } return answer(n+1); }