和用栈求解迷宫问题思路相似,特此记录下。

代码:

#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <algorithm>
using namespace std;
#define maxn 100
int n,num=1;//num定义为全局变量
typedef struct node {int col[maxn];//col[i]表示第i个n皇后的列数,(i,col[i])即为坐标int top;
}stacktype;
void display(stacktype st)
{printf("    第%d个解为:",num++);for(int i=1;i<=n;i++)printf("(%d,%d) ",i,st.col[i]);printf("\n");
}
bool place(stacktype st,int k,int j)
{int i=1;if(k==1) return true;//第一个皇后直接放入,没有任何冲突while(i<=k-1)//遍历前k-1个皇后,判断第k个皇后是否可以放在(k,j)处{if((st.col[i]==j)||(abs(st.col[i]-j)==abs(i-k)))return false;i++;}return true;
}
void queen(int n)
{int k;bool find;stacktype st;st.top=1;st.col[st.top]=0;while(st.top!=0){k=st.top;//记录栈顶皇后的个数find=false;for(int j=st.col[k]+1;j<=n;j++)//回溯时要遍历当前列后面的列数,且下一个皇后的初始化列数为0if(place(st,k,j)){st.col[k]=j;find=true;break;//找到第一个可以放入的位置}if(find){if(k==n){display(st);//每次能放完n个皇后都要输出}else{st.top++;st.col[st.top]=0;}}else st.top--;//回溯,最后while结束时是当第一个皇后放在(1,n)位置时无法将n个皇后都放下,st.top=0}if(num==1)printf("  此%d皇后问题无解!\n",n);
}
int main()
{printf("n皇后问题求解:n=");scanf("%d",&n);if(n>20) printf("n必须小于20\n");else{printf(" %d皇后问题的求解情况如下:\n",n);queen(n);}return 0;
}

数据结构实验题:用栈求解n皇后问题相关推荐

  1. 数据结构学习之栈求解n皇后问题

    数据结构学习之栈求解n皇后问题 0x1 目的 ​ 深入掌握栈应用的算法和设计 0x2 内容 ​ 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...

  2. 算法与数据结构实验题 10.23 寡人的难题

    算法与数据结构实验题 10.23 寡人的难题 ★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的 ...

  3. 算法与数据结构实验题 10.16 被Gank的亚索

    算法与数据结构实验题 10.16 被Gank的亚索 ★实验任务 "哈撒给~",亚索一个Q打中了残血的维克多并挂上了点燃,正当亚索准备单杀维克多时,突然一声大喝!从两边草丛中窜出了两 ...

  4. 数据结构实验报告3————栈和队列及其应用

    实验内容 (1)栈的定义.基本操作的实现,以及典型应用 ①编程实现顺序栈/链栈的基本操作(如:栈的初始化.判断栈空.求栈的长度.取栈顶.入栈.出栈等),并设计菜单调用.(必做) ②利用栈结构,实现将任 ...

  5. 数据结构实验报告二 栈和队列

    一.实验目的 1.掌握栈的结构特性及其入栈,出栈操作: 2.掌握队列的结构特性及其入队.出队的操作,掌握循环队列的特点及其操作. 二.实验内容和要求 1.阅读下面程序,将函数Push和函数Pop补充完 ...

  6. 北京林业大学数据结构实验二 基于栈的算术表达式求值算法

    第1关:基于栈的中缀算术表达式求值 参见课本P75 例3.3 #include <iostream> #include<iomanip>#define MAXSIZE 100 ...

  7. 算法与数据结构实验题 6.4 Summary

    ★实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记 下了他认为的各个地点的小偷数量. 现在我们将 Bibi 的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节 ...

  8. 算法与数据结构1800题 之 栈和队列

    b,c 栈已经存在 栈ADT initStack(&S):初始化一个空栈 StackEmpty(S):判断栈是否为空 Push(&S,x):进栈 Pop(&S,&x): ...

  9. 算法与数据结构实验题 5.18 小孩的游戏

    ★实验任务 一群小孩子在玩游戏,游戏规则是这样子,给了一些卡片,上面有数字,现在要把卡片按照某一种序列排好,让这些数字重新链接组合成一个大数,求最大的数是什么. ★数据输入 第一行一个整数N 接下来N ...

  10. 数据结构实验题——一元多项式计算

    一元多项式计算 程序所能达到的功能: 1.实现一元多项式的输入; 2.实现一元多项式的输出; 3.计算两个一元多项式的和并输出结果; 4.计算两个一元多项式的差并输出结果; 效果图 #include& ...

最新文章

  1. 启示录:打造用户喜爱的产品【PDF清晰版】,产品经理必看书籍之一
  2. OpenCV LATCH Matching描述符匹配算法的实例(附完整代码)
  3. hadoop mysql 存储过程_hadoop 存储过程
  4. POJ 3259 Wormholes【最短路/SPFA判断负环模板】
  5. (进阶篇)Redis6.2.0 集群 主从复制_搭建_01
  6. java semaphorewa_Java并发(十五):并发工具类——信号量Semaphore
  7. SQL server插入数据后,获取自增长字段的值
  8. 加快战略转型进程:统帅电器挺进年轻用户市场
  9. 蓝桥杯 BASIC-15 基础练习 字符串对比
  10. Python无限播放励志语句
  11. 如何设计一个完美的权限管理模块
  12. Leetcode: 3Sum
  13. jupyter nootbook支持matlab语言
  14. 张尧浠:美股反弹避险情绪降温、黄金迎美零售看回撤力
  15. 基于股票数据的多元线性回归分析
  16. Java中枚举类的ordinal()方法
  17. 计算机键盘pausebreak,键盘PauseBreak键作用
  18. 用python做透视表_使用python在Excel中创建透视表
  19. 物联网大赛“千里挑一”,华为、上海交大共铸人才引擎
  20. 2017年华东师范大学网络赛 A

热门文章

  1. windows 2003 server IIS权限设置
  2. random.uniform()用法
  3. mac ox php.ini 位置,MAC Osx PHP安装指导
  4. java怎么定义scanner_Java Scanner类的常用方法及用法(很详细)
  5. mysql为什么尽量少星号,mysql – select中是否存在星号排除其他列?
  6. 7部署rancher步骤_Rancher发布K3s,真会玩。。
  7. python可以处理什么文件_第十五篇 Python之文件处理
  8. mysql查询一个月未登录_mysql函数实例-统计1周内未登陆的用户
  9. html 文本框 获取焦点事件,JS的文本输入框获得焦点与失去焦点的事件
  10. CAS单点登录(SSO)