八皇后

#include <stdio.h>


//判断能否放置皇后
int ok(int arr[8][8],int x,int y)
{
	//判断横行
	int i = 0,j = 0;
	while(i < 8 && j < 8){
		if(arr[x][i] == 1) return 0;
		if(arr[i][y] == 1) return 0;
		i++;
		j++;
		if(x + i < 8 && y + j < 8){
			if(arr[x + i][y + j] == 1) return 0;
		}
		if(x + i < 8 && y - j >= 0){
			if(arr[x + i][y - j] == 1) return 0;
		}
		if(x - i >= 0 && y + j < 8){
			if(arr[x - i][y + j] == 1) return 0;
		}
		if(x - i >= 0 && y - j >= 0){
			if(arr[x - i][y - j] == 1) return 0;
		}
	}
	return 1;

}

void reset(int arr[8][8])
{
	int i,j;
	for(i = 0;i<8;i++){
		for(j = 0;j<8;j++){
			arr[i][j] = 0;
		}
	}

}


void print(int arr[8][8])
{
	int i,j;
	for(i=0;i<8;i++){
		for(j=0;j<8;j++){
			printf("%d ",arr[i][j]);
			if(j == 7) printf("\n");
		}
	}

}


void queen(int arr[8][8],int m,int n)
{
	int i,j;
	int cnt = 0;
	for(i = m;i < 8;i++){
		for(j = n;j < 8;j++){
			if(ok(arr,i,j)){
				arr[i][j] = 1;
				cnt++;
				printf("i=%d,j=%d\n",i,j);
				if(cnt >= 8){
					print(arr);
					reset(arr);
					return;
				}
			}	
		}
	}
	reset(arr);	
}




int main()
{
	
	int m ,n;
	int arr[8][8] = {};
	print(arr);
	for(m = 0;m< 8;m++){
		for(n = 0;n < 8;n++){
			queen(arr,m,n);
		}
	}
	return 1;
}
















 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值