八皇后

编写出八皇后的算法->递归算法

#include <stdio.h>
int nCount=0;
int noDanger(int row,int j,int (*chess)[8]){
	int i=0,k=0;
	//判断每一行的指定列是否有皇后
	for(i=0;i<8;i++){
		if(chess[row][i]){
			return 0;
		}
	}
	//判断左上方
	for(i=row;i>=0;i--){
		for(k=j;k>=0;k--){
			if(chess[i][k]){
				return 0;
			}		
		}

	}
	//判断右下方
	for(i=row;i<8;i++){
		for(k=j;k<8;k++){
			if(chess[i][k]){
				return 0;
			}		
		}

	}
	//判断右上方
	for(i=row;i>=0;i--){
		for(k=j;k<8;k++){
			if(chess[i][k]){
				return 0;
			}		
		}

	}
	//判断左下方
	for(i=row;i<8;i++){
		for(k=j;k>=0;k--){
			if(chess[i][k]){
				return 0;
			}		
		}

	}
	return 1;
}
void EightQueen(int row,int n,int(*chess)[8]){
	int chess2[8][8];//临时数组
	int i=0,j=0;
	for(i=0;i<8;i++){
		for(j=0;j<8;j++){
			chess2[i][j]=chess[i][j];//拷贝
		}
	}
	if(row==8){
		//表示排列完成
		printf("%d\n",nCount++);//打印出第几组八皇后排列完成
		for(i=0;i<8;i++){
			for(j=0;j<8;j++){
				printf("%d\t",chess2[i][j]);
			}
			printf("\n");
		}
	}else{
		//还必须革命努力
		for(j=0;j<n;j++){
			if(noDanger(row,j,chess)){
				for(i=0;i<8;i++){
					chess2[row][i]=0;//这一行都清0
				}
				chess2[row][j]=1;//这一行这一列表示皇后占据
				EightQueen(row+1,n,chess2);
			}
		}
	}
}
int main(){
	int chess[8][8],i,j;
	//将数组进行初始化为0
	for(i=0;i<8;i++){
		for(j=0;j<8;j++){
			chess[i][j]=0;
		}
	}
	EightQueen(0,8,chess);
	printf("一共 %d有多少种解决方法",nCount);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值