【C/C++】回溯经典算法之-->八皇后问题

一、八皇后问题

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。

《【C/C++】回溯经典算法之-->八皇后问题》” /></p><h1>二、问题分析</h1><h2>整体思路:</h2><p>创建一个全局变量的二维数组chess;</p><p>并初始化全为0</p><p>一行一行开始放皇后;</p><p>若存在相互攻击,则皇后向右移一列</p><p>若不存在攻击,进行下一行皇后的放置(这里要用到递归)</p><h2>要点:</h2><h3>(1)国际象棋的格数</h3><p>国际像是是8*8,因此,如果放置八个皇后,那么每一行都有一个</p><h3>(2)问题具体化</h3><p>利用二维数组,用1来代表皇后,其他为0</p><h3>(3)皇后的放置方法</h3><p>利用循环,判断位置是否可以放置皇后,若可以,则放置(将其置1)</p><h1>三、代码实现</h1><h2>代码块:</h2><pre><code>#include<stdio.h>
#include<windows.h>
#define N 8 //可以根据N来修改棋盘的格数 
int count = 0;//设置一个计数器 
int chess[N][N] = {0};//用于存放棋盘的二维数组 

void print()//打印函数 
{	
	int i = 0;
	int j = 0;
	printf(

运行结果:

《【C/C++】回溯经典算法之-->八皇后问题》” /></p></div><div style=     原文作者:常用算法
    原文地址: https://blog.csdn.net/qq_31828515/article/details/51868515
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

点赞