回溯递归算法----八皇后问题
前,有皇帝。就拿八皇后。由此产生的一系列问题,凌乱。由此产生的八皇后问题。哈哈
开玩笑~~~~
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于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中解法,这里就不一一的列出来了。
详细看自己的执行结果吧~~~~~
版权声明:本文博客原创文章,博客,未经同意,不得转载。
回溯递归算法----八皇后问题相关推荐
- 【算法】递归|迷宫回溯问题|八皇后问题
[算法]递归|迷宫回溯问题|八皇后问题 迷宫回溯问题,要用动态的眼光来看待这个递归算法. package com.serein.recursion;/*** @author baichuan* @ ...
- 递归回溯解决八皇后问题
文章目录 前言 八皇后问题 问题解析 代码实现 完整代码 前言 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇 ...
- 递归/回溯:八皇后问题N-Queens
N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...
- 回溯算法(八皇后问题)
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- 使用回溯算法分析八皇后问题
一. 八皇后问题? 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法? 二.思路 1.首先如何解决递归问题呢? *找到递推公式* ...
- ACM:回溯,八皇后问题,素数环
(一)八皇后问题 (1)回溯 #include <iostream> #include <string>#define MAXN 100using namespace std; ...
- 【Java数据结构与算法】第五章 递归、迷宫回溯和八皇后问题
第五章 递归 文章目录 第五章 递归 一.递归 1.概念 2.代码实现 3.递归的规则 二.迷宫回溯 1.要求 2.代码实现 三.八皇后问题 1.介绍 2.思路 3.代码实现 一.递归 1.概念 简单 ...
- 学习笔记-回溯算法(八皇后问题)暴力法
八皇后问题暴力解决法(介绍代码有说明) 先展示结果: 我这里用的是一维数组来展示的结果 array={7,3,0,2,5,1,6,4} 7的下标为0, 在这里下标+1表示的是第几个皇后也是行的位置,a ...
- 分治回溯算法----八皇后问题
八皇后问题:在一个8×8的棋盘中,放入8个皇后棋子,要求同行同列同斜线不能有重复的皇后棋子,八皇后问题一共有92种解法.如图所示:即八皇后问题的一个解. //分治回溯算法解决八皇后问题 public ...
最新文章
- 补psp进度(11月4号-9号)
- docker的容器管理和网络模式
- SharePoint 2010新体验2 – Ribbon界面
- 图解Golang的GC算法
- Python批处理文件
- 【GD32L233C-START】11、GD32 ISP软件还不支持GD32L233
- Python练习数据结构笔记
- 刚刚地震了,怎么办?
- 元旦贺卡html,元旦新年贺卡怎么做
- 纯电动汽车架构设计(一) :电动车架构设计核心与前悬架选择
- 2017年最新苹果开发者账号注册申请流程最强详解!
- s3c2410 2.6.22.1内核移植
- 搭建我的云端服务器环境
- 记一次漫长的蓝屏处理过程
- pytorch系列教程(四)-自定义损失函数
- 关于app运营的这几个考核指标你不能不了解!
- 什么是真正的实时操作系统
- 程序员的简历生存之道
- 隐藏手机号的方法总结
- proteus仿真arduino控制两位数码管
热门文章
- 计算机辅助平面绘图是干嘛的,【1人回答】AutoCAD画图是什么,干什么用的?-3D溜溜网...
- java语言数组实现栈的操作_基于自定义的动态数组实现一个栈(Java语言)
- httpclient java 过时_当年用httpclient时踩过的那些坑
- 烟台大学计算机学院学院,烟台大学计算机学院
- 埃氏筛法(求n以内有多少个素数)
- IDEA连接PostgreSQL数据库
- 将图片文件通过byte[]字节数组Base64加密后给前端显示
- java 线程 john_教你Java开发中多线程同步技巧
- sql server alter权限_SQL
- mysql 数据库表重建_mysql 数据库表重建