回溯法求八皇后问题

版权声明:欢迎大家阅读,共同交流。 https://blog.csdn.net/StarCoder_WangYue/article/details/78999327

本算法将第第x行皇后的列编号记为C[x],回溯求符合条件的tot,递归边界为从0到7(八皇后),皇后为逐行放置,cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]判断皇后是否在同一对角线上话不多说,直接上代码:

#include<stdio.h>
int tot=0,n=8,C[10];
void search(int cur){
	
	int i,j;
	if(cur == n) tot++;
	else for(i=0;i<n;i++){
		int ok=1;
		C[cur]=i;
		for(j=0;j<cur;j++)
			if(C[cur] == C[j] || cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]){
				ok=0;
				break;
			}
			if(ok) search(cur+1);
		}
} 

int main(){
	
	search(0);
	printf("八皇后问题的解的个数为:%d\n",tot);
}

猜你喜欢

转载自blog.csdn.net/StarCoder_WangYue/article/details/78999327