#include <stdio.h> #include <stdlib.h> int count=0; int a[8]; bool issafe(int x,int y){//x为当前摆放的棋子的横坐标,y为当前摆放的棋子的纵坐标 bool ret = true; for(int i=0;i<x;i++){//这里的i就是摆放好的棋子的位置 if(x==i||a[i]==y||x-i==y-a[i]||x-i==-y+a[i]){ ret = false; /*break;*/ } } return ret; } // void dfs(int step){ if(step==8){ count++;//统计一共有多少种解法 return; } for(int i =0;i<8;i++){ if(issafe(step,i)){ a[step] = i; dfs(step+1); } } } int main(){ dfs(0); printf("%d ",count); /*for(int j=0;j<8;j++){ printf("%d ",a[j]); }*/ system("pause"); }
迭代变量的选取:
能够唯一描述当前该问题的状态变量
该问题中有两个对应的变量:1.当前摆放到第几行2.摆放的位置