C++实现八皇后问题
C++实现八皇后问题
- #include <iostream>
- using std::cout;
- using std::endl;
- #include <iomanip>
- using std::setw;
- #include <cmath>
- //非递归算法解决八皇后问题。求出可能的92种。
- // using std::abs;
- int main()
- {
- static int queen[9];
- static int count=1;
- for (int A=1;A<=8;A++)
- {
- for (int B=1;B<=8;B++)
- {
- if (B==A)
- {
- continue;
- }
- queen[2]=B;
- if ((abs(B-A))==1)
- {
- continue;
- }
- queen[1]=A;
- for (int C=1;C<=8;C++)
- {
- if ((C==B) || (C==A))
- {
- continue;
- }
- if ((abs(C-B)==1)||(abs(C-A)==2))
- {
- continue;
- }
- queen[3]=C;
- for (int D=1;D<=8;D++)
- {
- if ((D==C)||(D==B)||(D==A))
- {
- continue;
- }
- if ((abs(D-C)==1)||(abs(D-B)==2)||(abs(D-A)==3))
- {
- continue;
- }
- queen[4]=D;
- for (int E=1;E<=8;E++)
- {
- if ((E==D)||(E==C)||(E==B)||(E==A))
- {
- continue;
- }
- if ((abs(E-D)==1)||(abs(E-C)==2)||(abs(E-B)==3)||(abs(E-A)==4))
- {
- continue;
- }
- queen[5]=E;
- for (int F=1;F<=8;F++)
- {
- if ((F==E)||(F==D)||(F==C)||(F==B)||(F==A))
- {
- continue;
- }
- if ((abs(F-E)==1)||(abs(F-D)==2)||(abs(F-C)==3)||(abs(F-B)==4)||(abs(F-A)==5))
- {
- continue;
- }
- queen[6]=F;
- for (int G=1;G<=8;G++)
- {
- if ((G==F)||(G==E)||(G==D)||(G==C)||(G==B)||(G==A))
- {
- continue;
- }
- if ((abs(G-F)==1)||(abs(G-E)==2)||(abs(G-D)==3)||(abs(G-C)==4)||(abs(G-B)==5)||(abs(G-A)==6))
- {
- continue;
- }
- queen[7]=G;
- for (int I=1;I<=8;I++)
- {
- if ((I==G)||(I==F)||(I==E)||(I==D)||(I==C)||(I==B)||(I==A))
- {
- continue;
- }
- if ((abs(I-G)==1)||(abs(I-F)==2)||(abs(I-E)==3)||(abs(I-D)==4)||(abs(I-C)==5)
- ||(abs(I-B)==6)||(abs(I-A)==7))
- {
- continue;
- }
- queen[8]=I;
- cout<<" NO."<<setw(2)<<count<<": ";
- for (int i=1;i<=8;i++)
- {
- cout<<setw(3)<<queen[i];
- }
- count++;
- cout<<endl;
- }
- }
- }
- }
- }
- }
- }
- }
- return 0;
- }
- #include <iostream>
- using namespace std;
- //递归算法解决八皇后问题。总共有92种解法。
- int c[], n=, cnt=;
- void print(){
- for(int i=; i<n; ++i){
- for(int j=; j<n; ++j){
- if(j == c[i]) cout<<"1 ";
- else cout<<"0 ";
- }
- cout<<endl;
- }
- cout<<endl;
- }
- void search(int r){
- if(r == n){
- print();
- ++cnt;
- return;
- }
- for(int i=; i<n; ++i){
- c[r] = i;
- int ok = ;
- for(int j=; j<r; ++j)
- if(c[r]==c[j] || r-j==c[r]-c[j] || r-j==c[j]-c[r]){
- ok = ;
- break;
- }
- if(ok) search(r+);
- }
- }
- int main(){
- search();
- cout<<cnt<<endl;
- return ;
- }
C++实现八皇后问题的更多相关文章
- 八皇后算法的另一种实现(c#版本)
八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...
- 数据结构0103汉诺塔&八皇后
主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...
- Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
- Python解决八皇后问题
最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的 ...
- OpenJudge1700:八皇后问题 //不属于基本法的基本玩意
1700:八皇后问题//搜索 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和 ...
- C#八皇后问题 枚举值
记得刚出道的时候, 有考虑怎么面试, 以及可能会遇到的面试题, 有一个人说了一下 八皇后问题, 据说要用 sql 语句写出来, 暂时我 写了一个C#版本的, 经测验,八皇后算法结果为 92种, 这个与 ...
- 八皇后(dfs+回溯)
重看了一下刘汝佳的白板书,上次写八皇后时并不是很懂,再写一次: 方法1:逐行放置皇后,然后递归: 代码: #include <bits/stdc++.h> #define MAXN 8 # ...
- C语言解决八皇后问题
#include <stdio.h> #include <stdlib.h> /* this code is used to cope with the problem of ...
- 八皇后,回溯与递归(Python实现)
八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...
- java实现八皇后问题(递归和循环两种方式)
循环方式: package EightQueens; public class EightQueensNotRecursive { private static final boolean AVA ...
随机推荐
- Orm框架开发之NewExpression合并问题
之前都是看别人写博客,自己没有写博客的习惯.在工作的过程中,总是会碰到许多的技术问题.有很多时候想记录下来,后面一直有许多的问题等着解决.总想着等系统完成了,再回头总结下.往往结果就把这事抛到脑后了. ...
- 【转】谈“P=NP?”
“P=NP?” 通常被认为是计算机科学最重要的问题.有一个叫Clay Math的研究所,甚至悬赏 100 万美元给解决它的人.可是我今天要告诉你的是,这个问题其实是不存在的,它根本不需要解决. 我并不 ...
- Linux内核同步 - spin_lock
一.前言 在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用semaphore或者mutex的锁机 ...
- java实现简单webserver(分析+源码)
在日常的开发中,我们用过非常多开源的webserver,比如tomcat.apache等等.如今我们自己实现一个简单的webserver,主要的功能就是用户点击要訪问的资源,server将资源发送到c ...
- sklearn 中的交叉验证
sklearn中的交叉验证(Cross-Validation) sklearn是利用python进行机器学习中一个非常全面和好用的第三方库,用过的都说好.今天主要记录一下sklearn中关于交叉验证的 ...
- Gitbook 生成 pdf 中文字体错乱问题解决办法
Gitbook 生成 pdf 中文字体错乱问题解决办法 用过 Gitbook 的都知道, Gitbook 会自动生成 pdf 以提供下载, 但十分遗憾的是自动生成的 pdf 对中文的支持并不好, ...
- [Jobdu] 题目1214:丑数
题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输 ...
- Linode中的Network Helper
Linode主机vps有一个很好的网络配置工具:Network Helper,他可以在系统启动的时候,根据你的操作系统,以及检测到的网络配置等信息,自动配置好网络,非常有用. 官方文档: Networ ...
- 基于FPGA的异步FIFO设计
今天要介绍的异步FIFO,可以有不同的读写时钟,即不同的时钟域.由于异步FIFO没有外部地址端口,因此内部采用读写指针并顺序读写,即先写进FIFO的数据先读取(简称先进先出).这里的读写指针是异步的, ...
- Codeforces 441C Valera and Tubes
题目链接:Codeforces 441C Valera and Tubes 没看到r >= 2一直错.让前几个管子占用2个格子.最后一个把剩下的都占用了.假设问题有解.这样做一定有解.其它策略就 ...