用c++的栈队列,写汗诺塔或者八皇后问题,,,谢谢……

作者&投稿:舟佩 (若有异议请与网页底部的电邮联系)
用c++的栈队列,写八皇后问题,,,谢谢……~

#ifndef _QUEENBOARD_H_
#define _QUEENBOARD_H_

const int BOARDSIZE = 8;

using namespace std;

class Queenboard {

private:
bool board[BOARDSIZE][BOARDSIZE];

public:
Queenboard();
bool is_space_under_attack(int, int) const;
void occupy_space(int, int);
void clear_column(int);

friend ostream& operator<<(ostream& out, const Queenboard& cb);
};

Queenboard::Queenboard() {
// Initialize the board to contain zero queens.
for (int row = 0; row < BOARDSIZE; row++) {
for (int col = 0; col < BOARDSIZE; col++) {
board[row][col] = false;
}
}
}


ostream& operator<<(ostream& out, const Queenboard& cb) {

// output the board
for (int row = 0; row < BOARDSIZE; row++) {

out << "---------------------------------" << endl;
for (int col = 0; col < BOARDSIZE; col++) {
out << "|";
if ( cb.board[row][col]) {
out << " Q ";
}
else {
out << " ";
}
}
out << "|" << endl;
}
out << "---------------------------------" << endl;
return out;
}

void Queenboard::clear_column(int col) {

if (col >= BOARDSIZE || col < 0) {
throw out_of_range("Queenboard::clear_column()");
}

for (int row = 0; row < BOARDSIZE; row++) {
board[row][col] = false;
}
}

void Queenboard::occupy_space(int row, int col) {

if (col >= BOARDSIZE || col < 0 ||
row >= BOARDSIZE || row < 0) {
throw out_of_range("Queenboard::occupy_space()");
}

// places a queen on the board
board[row][col] = true;
}

bool Queenboard::is_space_under_attack(int row, int col) const {

if (col >= BOARDSIZE || col < 0 ||
row >= BOARDSIZE || row < 0) {
throw out_of_range("Queenboard::is_space_under_attack()");
}

// check to the left
int i = col - 1;
while (i >= 0) {
if (board[row][i]) return true;
i--;
}

// check diagonal up and left
int j = row - 1;
int k = col - 1;
while (j >= 0 && k >= 0) {
if (board[j][k]) return true;
j--; k--;
}

// check diagonal down and left
j = row + 1;
k = col - 1;
while (j = 0) {
if (board[j][k]) return true;
j++; k--;
}

return false;
}

#endif

#include
#include
#include

#include "Queenboard.h"

using namespace std;

bool place_queens(Queenboard& qb, int col);

int main(int argc, char* argv[]) {

try {

Queenboard qb;
if (! place_queens(qb, 0)) {
cout << "No solution found.
";
}
return EXIT_SUCCESS;
}
catch (exception& e) {
cerr << e.what() << "
";
}
catch (...) {
cerr << "Unknown exception caught.
";
}

return EXIT_FAILURE;
}

bool place_queens(Queenboard& qb, int col) {

bool inserted = false;
for (int row = 0; row < BOARDSIZE; row++) {

if (! qb.is_space_under_attack(row, col)) {

// insert a queen
qb.occupy_space(row, col);
inserted = true;

if (col == BOARDSIZE - 1) {
// solution found!
cout << qb << "
";
return true;

}
else {
// place a queen in the next column
if (place_queens(qb, col + 1)) {
return true;
}
else {
inserted = false;
}
}
}
}

if (! inserted) {
// backtrack to previous column
qb.clear_column(col - 1);
return false;
}
}

不一样;data[i]应该表示的是第i行的位置,和i的值不一定一样;
加入两个皇后在一条斜线上,比如(i=1,data[i]=5)和(i=5,data[i]=1)或者(1,5)和(2,6),
可以看出,当两个位置的行(i)的差值等于纵坐标(data[i])的差的绝对值时,两个皇后是在一条直线上的

用递归的算法
具体看www.leycn.org.ru


用数据结构的栈和队列 写 回文判断
用栈实现了判断回文数的操作,即把字符串依次入栈,然后出栈并依次和字符数组比较是否相等,从而判断字符序列是否回文数,代码如下:include "stdio.h"include "stdlib.h"include "string.h"define EMPTY 0 define FULL 10000 define MAX 10000 typedef char data;typedef struct elem { data d;struct ...

数据结构(C语言编写完整可运行程序):设有队列Q、栈S,设计算法利用栈S将...
stack S;\/\/建立栈S init_s(&S);Queue Q;\/\/建立循环队列Q init_q(&Q);Enqueue(&Q, 1);Enqueue(&Q, 2);Enqueue(&Q, 3);printf("逆置后对列中的元素是\\n");OutQpushS(&Q, &S);\/\/出对入栈 PopOut(&S, &Q);\/\/出栈并入队 Out(&Q);\/\/对Q出对 return 0;} void init_s...

C语言栈和队列或者链表之类的数据结构中可以存放不同类型的数据吗?如一...
对于栈 、队列、链表,你可以声明不同类型的它们,比如声明一个整型栈,那该栈就只能存放整型数据。你声明什么类型的数据结构,就只能存放什么类型的数据。对,elemtype实际上就是任意类型的意思,当你实际操作时,需要将其换成自己要用的类型。

c语言里的堆栈,队列,链表什么的越学越晕
先搞懂基本概念,和堆栈,队列的特点 链表是以上两个概念的具体应用的一种数据结构实现方式 然后,从课本上最简单的代码开始,去练习,体会其中的应用,等吃透概念后,再去写复杂的代码。多练习自然有心得,练习中加上思考与自我提问,了解每个代码的具体目的,时间长了,自然有收获,一通百通,自然会好转...

请设计一个程序用于描述堆栈和队列存取功能的例子。
\/\/ 接口类,命名随意public interface Access{ \/\/ 插入方法 void put(char c); \/\/ 取出方法 char get();}\/\/ 子类继承接口实现具体的堆栈结构public class Stack : Access{ \/\/ 用来存储字符串 private char[] _chars; \/\/ 用来栈顶计数 private int top = 0; ...

帮忙完成一下这段程序的注释(C语言版数据结构)
include <stdio.h> include <stdlib.h> define MAX 100 \/\/ 定义最大数据数 typedef struct { int data[MAX];int rear;int quelen;}SqQueue; \/\/ 定义队列数据结构 \/\/ 初始化栈队列 SqQueue* InitStack(){ SqQueue *q;q=(SqQueue *)malloc (sizeof(SqQueue));q->quelen=q->rear=0;return...

栈和队列有什么异同点?
[答案]C [考点]数据结构与算法 解析:栈是先进后出的,队列是先进先出的,共同点是只允许在端点处插入和删除元素。栈都是在一端进与出,而队列是在一端进在另一端出。在计算机领域,堆栈是一个不容忽视的概念,堆栈是一种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶...

迷宫问题(栈或队列,最短路径)(c语言)
include<stdio.h> include<stdlib.h> define M 15 define N 15 struct mark \/\/定义迷宫内点的坐标类型 { int x;int y;};struct Element \/\/"恋"栈元素,嘿嘿。。{ int x,y; \/\/x行,y列 int d; \/\/d下一步的方向 };typedef struct LStack \/\/链栈 { Element elem;struct LStack *next...

C语言数据结构:利用两个顺序栈来实现一个列队的功能时遇到的问题
然后s1的4、5依次压回栈s1,然后s1就能够空出栈顶的一个位置了,对吧?但是,这个放置s1出栈元素的缓冲区。。。也得是一个栈结构吧?否则的话,你怎么知道s1向缓冲区出栈的u元素 顺序呢?这样就不是双栈模拟队列了,势必还得用到一个中间栈s3来满足你这种处理方式~因此,双栈模拟队列时,当栈s1...

栈与队列的区别
1、队列先进先出,栈先进后出。2、对插入和删除操作的"限定"不同。栈是限定只能在表的一端进行插入和删除操作的线性表。队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。3、遍历数据速度不同。栈只能从头部取数据,也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的...

洛浦县19659209599: 用C语言代码来编写含汉诺塔问题,利用顺序栈来实现.求代码 -
月亮雪町: void hanoi(int n,char x,char y,char z) { if(n==1) move(x,1,z); else {hanoi(n-1,x,z,y); move(x,n,z); hanoi(n-1,y,x,z);} }

洛浦县19659209599: C++用栈结构实现八皇后问题
月亮雪町: // 源码如下:#include <iostream>using namespace std;////////////////////////////////////////////////////////////////////////////定义栈的最大高度const int StackSize = 6;//初始化摆放方案计数器int ans = 0;////////////////////////////////////////////////////////////////////////////定义顺序栈模板类...

洛浦县19659209599: 用C ++编汗诺塔游戏怎么做? -
月亮雪町: #include<stido.h> vido main(){ vido hanoi(int n,char one ,char two,char three); int m; printf ("input the number of diskes:"); scanf ("%d",&m); prinft ("The step to moveing %d diskes:\n",m); hanoi(m,'A','B','C');} void hanoi(int n,char one,char two...

洛浦县19659209599: c语言,用栈和递归实现汉诺塔问题,输入参数n,输出移动顺序 -
月亮雪町: void move(char a,char b,char c,int n) { if(n==0) return; else if(n=1) { printf("%c to %c",a,c); } else { move(a,c,b,n-1); printf("%c to %c",a,c); move(b,a,c,n-1); } }

洛浦县19659209599: 数据结构 -- 用栈实现汉诺塔
月亮雪町: 递归和堆栈是相通的,能够用递归实现的程序就一定能用堆栈来实现,而用递归实际上是利用了系统的堆栈,把一切责任都推给了操作系统来完成,但是有个问题就是如果我们用堆栈的话我们就必须先定义一个堆栈的数据结构,还是比较麻烦,...

洛浦县19659209599: C++栈结构实现汉诺塔,程序写出来没报错但是不能运行,貌似是什么内存问题....在线跪求大身解救!!! -
月亮雪町: 你的答案也没什么大的错误.两个地方改正下就好了.1. void tryHanoi(int n, SeqStack<int> &a, SeqStack<int> &b, SeqStack<int> &c)使用引用2. 在主函数中调用tryHanoi前,将n重置为3.这两个地方修改后就可以运行了.细节问题确实不容易注意...

洛浦县19659209599: 用C语言里的栈结构实现八皇后问题
月亮雪町: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; int Judge(int *p, int j) //判断当前棋子位置是否符合规则,是则返回1,否则返回0; { int i; for(i=0;i&lt;j;i++) { if(p[j]==p[i]) return 0; if(abs(p[j]-p[i])==j-i) return 0; } return 1; } int main() ...

洛浦县19659209599: c++用栈解决八皇后问题
月亮雪町: #include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define status inttypedef int ElemType;#define STACKSIZE 100struct sqstack //补充栈的结构类型声明部分;status initstack(sqstack &s)status push(sqstack &s, ElemType e)...

洛浦县19659209599: 求c++汉诺塔代码,急! -
月亮雪町: main() {int x; printf("shuruhantashu:"); scanf("%d",&x); if(x==1)printf("a-->c\n"); else if(x==0)printf("erro\n"); else mov(x+1,'a','b','c');getch();} mov(int n,int a,int b,int c) {if(n>1){mov(n-1,a,c,b);printf("%c-->%c ",a,c);if(n%4==0)printf("\n");mov(n-1,b,a,c);}}//看我写的,十三行代码的.

洛浦县19659209599: 谁会用c++做汉诺塔问题?要代码
月亮雪町:汗,今天又遇到要汉诺塔代码的了 直接把原来的复制过来了 #include <iostream> using namespace std; void move(char s,char d) { cout << "把" << s << "石柱最上面的盘子移到" << d << "石柱上\n"; } void hanoi(int n,char a,char b,char c) //...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网