1. 程式人生 > >回溯法求八皇后問題

回溯法求八皇后問題

本演算法將第第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);
}