前,有皇帝。就拿八皇后。由此产生的一系列问题,凌乱。由此产生的八皇后问题。哈哈

开玩笑~~~~

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即随意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

高斯觉得有76种方案。

1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法能够解决此问题。

详细算法:

#include "stdafx.h"
#include <stdlib.h>
#define N 8typedef struct _tag_Pos
{int ios;int jos;
} Pos;static char board[N+2][N+2];
static Pos pos[] = { {-1, -1}, {-1, 0}, {-1, 1} };
static int count = 0;void init()
{int i = 0;int j = 0;for(i=0; i<N+2; i++){board[0][i] = '#';board[N+1][i] = '#';board[i][0] = '#';board[i][N+1] = '#';}for(i=1; i<=N; i++){for(j=1; j<=N; j++){board[i][j] = ' ';}}
}void display()
{int i = 0;int j = 1;for(i=0; i<N+2; i++){for(j=0; j<N+2; j++){printf("%c", board[i][j]);}printf("\n");}
}int check(int i, int j)
{int ret = 1;int p = 0;for(p=0; p<3; p++)//在三个方向寻找{int ni = i;int nj = j;while( ret && (board[ni][nj] != '#') ){ni = ni + pos[p].ios;nj = nj + pos[p].jos;ret = ret && (board[ni][nj] != '*');}}return ret;
}void find(int i)
{int j = 0;if( i > N ){count++;printf("Solution: %d\n", count);display();getchar();}else{for(j=1; j<=N; j++){if( check(i, j) ){board[i][j] = '*';find(i+1);board[i][j] = ' ';}}}
}int main()
{init();find(1);system("pause");return 0;
}

结果:八皇后共同拥有92中解法,这里就不一一的列出来了。

详细看自己的执行结果吧~~~~~

版权声明:本文博客原创文章,博客,未经同意,不得转载。

回溯递归算法----八皇后问题相关推荐

  1. 【算法】递归|迷宫回溯问题|八皇后问题

    [算法]递归|迷宫回溯问题|八皇后问题   迷宫回溯问题,要用动态的眼光来看待这个递归算法. package com.serein.recursion;/*** @author baichuan* @ ...

  2. 递归回溯解决八皇后问题

    文章目录 前言 八皇后问题 问题解析 代码实现 完整代码 前言 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇 ...

  3. 递归/回溯:八皇后问题N-Queens

    N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...

  4. 回溯算法(八皇后问题)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  5. 使用回溯算法分析八皇后问题

    一. 八皇后问题? 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法? 二.思路 1.首先如何解决递归问题呢? *找到递推公式* ...

  6. ACM:回溯,八皇后问题,素数环

    (一)八皇后问题 (1)回溯 #include <iostream> #include <string>#define MAXN 100using namespace std; ...

  7. 【Java数据结构与算法】第五章 递归、迷宫回溯和八皇后问题

    第五章 递归 文章目录 第五章 递归 一.递归 1.概念 2.代码实现 3.递归的规则 二.迷宫回溯 1.要求 2.代码实现 三.八皇后问题 1.介绍 2.思路 3.代码实现 一.递归 1.概念 简单 ...

  8. 学习笔记-回溯算法(八皇后问题)暴力法

    八皇后问题暴力解决法(介绍代码有说明) 先展示结果: 我这里用的是一维数组来展示的结果 array={7,3,0,2,5,1,6,4} 7的下标为0, 在这里下标+1表示的是第几个皇后也是行的位置,a ...

  9. 分治回溯算法----八皇后问题

    八皇后问题:在一个8×8的棋盘中,放入8个皇后棋子,要求同行同列同斜线不能有重复的皇后棋子,八皇后问题一共有92种解法.如图所示:即八皇后问题的一个解. //分治回溯算法解决八皇后问题 public ...

最新文章

  1. 补psp进度(11月4号-9号)
  2. docker的容器管理和网络模式
  3. SharePoint 2010新体验2 – Ribbon界面
  4. 图解Golang的GC算法
  5. Python批处理文件
  6. 【GD32L233C-START】11、GD32 ISP软件还不支持GD32L233
  7. Python练习数据结构笔记
  8. 刚刚地震了,怎么办?
  9. 元旦贺卡html,元旦新年贺卡怎么做
  10. 纯电动汽车架构设计(一) :电动车架构设计核心与前悬架选择
  11. 2017年最新苹果开发者账号注册申请流程最强详解!
  12. s3c2410 2.6.22.1内核移植
  13. 搭建我的云端服务器环境
  14. 记一次漫长的蓝屏处理过程
  15. pytorch系列教程(四)-自定义损失函数
  16. 关于app运营的这几个考核指标你不能不了解!
  17. 什么是真正的实时操作系统
  18. 程序员的简历生存之道
  19. 隐藏手机号的方法总结
  20. proteus仿真arduino控制两位数码管

热门文章

  1. 计算机辅助平面绘图是干嘛的,【1人回答】AutoCAD画图是什么,干什么用的?-3D溜溜网...
  2. java语言数组实现栈的操作_基于自定义的动态数组实现一个栈(Java语言)
  3. httpclient java 过时_当年用httpclient时踩过的那些坑
  4. 烟台大学计算机学院学院,烟台大学计算机学院
  5. 埃氏筛法(求n以内有多少个素数)
  6. IDEA连接PostgreSQL数据库
  7. 将图片文件通过byte[]字节数组Base64加密后给前端显示
  8. java 线程 john_教你Java开发中多线程同步技巧
  9. sql server alter权限_SQL
  10. mysql 数据库表重建_mysql 数据库表重建