queen.cpp

来自「约瑟夫环源代码,前中后序递归遍历二叉树」· C++ 代码 · 共 53 行

CPP
53
字号
#include<stdio.h>
#include<stdlib.h>
int a[8];//记录每行(0--8)棋子所在的列;
int n=1;//记录解决问题的摆法;
int ok(int r,int l){
	int i=0;
	for(i=0;i<(r-1);i++){//判断同列是否有棋子
		if(a[i]==l)return 0;	
	}
	for(i=1;i<r;i++){
		int m=l-r+i;
		while((m>0)&&(m<9)){
			if(a[i-1]==m)return 0;//判断左对角线是否有棋子
			else break;
		}
		m=l+r-i;
		while((m<=8)&&(m>0)){		
			if(a[i-1]==m)return 0;//判断有对角线是否有棋子
			else break;
		}
	}
	return 1;
}

void queen(int r){
	if(r>8){		
		for(int i=0;i<8;i++){
			printf("row=%d",i+1);
			printf(",line=");
			printf("%d",a[i]);
			printf("\n");			
		}
		printf("**********************,n=");//输出一种摆法,
		printf("%d",n);
		n=n+1;
		printf("\n");
	}
	else{		
		for(int l=1;l<=8;l++){
			if(ok(r,l)==1){//判断摆法是否合理;
				a[r-1]=l;//记录第r行棋子所在列;	
				queen(r+1);				
			}				
		}	
	}
}

void main(){
	int r=1,n=0;
	queen(1);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?