8_queens.cpp

来自「8_queens 经典8皇后问题 希望能为刚入门的朋友提供些许帮助」· C++ 代码 · 共 60 行

CPP
60
字号
#include <stdio.h>

static int chessboard[8][8];   ////定义棋盘
static int prow[8];  //列判断
static int a[15];  //左斜行条件组
static int b[15];  //右斜行条件组
static int count=0;  //记数

void queen(int line) {  //0代表皇后位置
	int row,j,k;
	
	for(row=0;row<8;row++) {
		if(prow[row]==1 && a[line-row+7]==1 && b[line+row]==1) {
			chessboard[line][row]=0;
			prow[row]=0;
			a[line-row+7]=0;
			b[line+row]=0;
			
			if(line<7) {
				queen(line+1);  //递归
			}
			else {
				count++;
				printf("*****NO.%d*****\n",count);
				for(k=0;k<8;k++)
					for(j=0;j<8;j++) {
						printf("%d ",chessboard[k][j]);
						if(j==7) printf("\n");
					}
				printf("***************\n");
			}
			
			chessboard[line][row]=1;  //回溯
			prow[row]=1;
			a[line-row+7]=1;
			b[line+row]=1;
		}
	}
}

int main() {
	int i,j;

	for(i=0;i<8;i++)  ////准备棋盘
		for(j=0;j<8;j++) {
			chessboard[i][j] = 1;
		}
		for(i=0;i<8;i++) {
			prow[i] = 1;
		}
		for(i=0;i<15;i++) {
			a[i] = 1;
		}
		for(i=0;i<15;i++) {
			b[i] = 1;
		}
	queen(0);
	return 0;
}

⌨️ 快捷键说明

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