首页 > 其他分享 >8皇后问题用基本数据结构实现(不用stl)

8皇后问题用基本数据结构实现(不用stl)

时间:2023-10-20 20:11:44浏览次数:32  
标签:pBase return stl QueenPlace int 皇后 数据结构 pTop size

  1 #include <iostream>
  2 using namespace std;
  3 
  4 #define STACKSIZE 256
  5 
  6 int Result;//记录结果
  7 
  8 typedef struct
  9 {
 10     int row;
 11     int col;
 12 }QueenPlace;
 13 
 14 typedef struct
 15 {
 16     QueenPlace* pBase;
 17     QueenPlace* pTop;
 18     int size;
 19     int now_size;
 20 }SeqStack;
 21 
 22 SeqStack StackQueen;
 23 
 24 bool InitStack(SeqStack& S)
 25 {
 26     S.pBase = (QueenPlace*)malloc(sizeof(QueenPlace) * 256);
 27     if (S.pBase == NULL) return false;
 28     S.size = 254;
 29     S.now_size = 0;
 30     S.pTop = S.pBase + 1;
 31     return true;
 32 }
 33 
 34 void DestoryStack(SeqStack& S)
 35 {
 36     if (S.pBase != NULL)
 37     {
 38         free(S.pBase);
 39         S.pBase = NULL;
 40     }
 41     S.pTop = NULL;
 42     S.size = 0;
 43     S.now_size = 0;
 44 }
 45 
 46 bool Push(SeqStack& S, QueenPlace e)
 47 {
 48     //假如栈超范围
 49     if (S.now_size >= S.size)
 50     {
 51         S.pBase = (QueenPlace*)realloc(S.pBase, sizeof(QueenPlace) * (256+STACKSIZE));
 52         if (S.pBase == NULL) return false;
 53         S.pTop = S.pBase + S.size + 1;
 54         S.size += 256;
 55     }
 56     S.pTop->row = e.row;
 57     S.pTop->col = e.col;
 58     S.now_size++;
 59     S.pTop++;
 60     return true;
 61 }
 62 
 63 bool IsEmpty(SeqStack& S)
 64 {
 65     if (S.pBase == S.pTop)return false;
 66     return true;
 67 }
 68 
 69 bool GetTop(SeqStack& S, QueenPlace& e)
 70 {
 71     S.pTop--;
 72     if (IsEmpty(S) == false) return false;
 73     e.col = S.pTop->col;
 74     e.row = S.pTop->row;
 75     S.now_size--;
 76 }
 77 
 78 bool Pop(SeqStack& S)
 79 {
 80     S.pTop--;
 81     if (IsEmpty(S) == false) return false;
 82     S.now_size--;
 83     return true;
 84 }
 85 
 86 void OutPutResult(SeqStack& S, int N)
 87 {
 88     QueenPlace* e = S.pBase+1;
 89     for (int i = 1; i <= N; i++)
 90     {
 91         cout << "(" << e->row << "," << e->col << ")";
 92         e = S.pBase + 1 + i;
 93     }
 94     cout << endl;
 95 }
 96 
 97 bool JudgeQueenConfliction(SeqStack & S,QueenPlace e)
 98 {
 99     int CurCol = e.col;
100     int CurRow = e.row;
101 
102     QueenPlace* CurQueen = S.pBase+1;
103     while (CurQueen < S.pTop-1)
104     {
105         int pCol = CurQueen->col;
106         int pRow = CurQueen->row;
107 
108         if (pCol == CurCol) return false;
109         if (abs(pCol - CurCol) == abs(pRow - CurRow)) return false;
110 
111         CurQueen++;
112     }
113     return true;
114 }
115 
116 void SearchQueenPlace(int row)
117 {
118     for (int i = 1; i <= 8; i++)
119     {
120         QueenPlace CurQueen;
121         CurQueen.row = row;
122         CurQueen.col = i;
123 
124         Push(StackQueen, CurQueen);
125         bool ret=JudgeQueenConfliction(StackQueen, CurQueen);
126         if (ret == true)
127         {
128             if (row < 8) SearchQueenPlace(row + 1);
129             else
130             {
131                 OutPutResult(StackQueen, 8);
132                 Result++;
133             }
134         }
135         Pop(StackQueen);
136     }
137 }
138 
139 
140 
141 int main()
142 {
143     Result= 0;
144     InitStack(StackQueen);
145     SearchQueenPlace(1);
146     cout << Result;
147     DestoryStack(StackQueen);
148 }

完全手搓栈并完成

回溯算法的使用

标签:pBase,return,stl,QueenPlace,int,皇后,数据结构,pTop,size
From: https://www.cnblogs.com/saucerdish/p/17777926.html

相关文章

  • 数据结构-链表
    //节点classNode{constructor(element){this.element=elementthis.next=null}}//链表classLinkList{constructor(){this.size=0this.head=null}//根据index获取节点getNode(index){if(index<0||index>......
  • 数据结构之美:如何优化搜索和排序算法
    文章目录搜索算法的优化1.二分搜索2.哈希表排序算法的优化1.快速排序2.归并排序总结......
  • 数据结构:实验一+实验二
    数据结构:实验一数据结构:实验二......
  • 数据结构与算法 | 链表(Linked List)
    链表(LinkedList)链表(LinkedList)是一种线性数据结构,它由一系列节点(Node)组成,每个节点包含两部分:数据和指向下(上)一个节点的引用(或指针)。链表中的节点按照线性顺序连接在一起(相邻节点不需要存储在连续内存位置),不像数组一样存储在连续的内存位置。链表通常由头节点(Head)来表示整个链......
  • 《数据结构》王卓老师 p48-p62学习反馈
    跟着青岛大学-王卓老师的视频进行到链队列时,运行链队列代码的时候遇到了两个问题:1.)ProgramreceivedsignalSIGSEGVSegmentationfault附代码: #include<stdio.h> #include<stdlib.h> typedefchar ElemType; typedefstructqnode{ ElemTypedata; structq......
  • S - 数据结构复习 E. 第K大和
    题目链接妙妙题!难度:Medium-。题意给定一个\(1\simn\)的全排列\(A_1,A_2,\cdots,A_n\)。给定一个\(k\),统计所有长度\(\geqk\)的子区间的第\(k\)大的数的和。\(n\leq5\times10^5\),\(k\leq\min(n,80)\)。题解考虑如果\(k=1\)怎么做。显然算每个数对答案的贡献......
  • 数据结构——图
    图的基本概念图是由顶点集合及顶点间的关系组成的一种数据结构:G=(V,E)其中:顶点集合V,边集合EV={x|x属于某个数据对象集}E={(x,y)|x,y属于V}(x,y)表示点x到点y的一条双向通路,是无方向的顶点:图中的节点,第几个顶点记作vi两个顶点vi和vj相关联称为顶点vi到顶点vj之间的一条边图分为有向图和......
  • 小白学算法-什么是矩阵数据结构以及有哪些应用?
    什么是矩阵数据结构以及有哪些应用矩阵表示按行和列的顺序排列的数字的集合。必须将矩阵的元素括在圆括号或方括号中。例如:具有9个元素的矩阵如下所示。该矩阵M有3行和3列。矩阵M的每个元素都可以通过其行号和列号来引用。例如,M[2][3]=6。矩阵是由行和列组成的二维数组。......
  • 3.1-Pandas数据结构
    3.1-Pandas数据结构  3.1.1认识Pandas库¶基于Numpy的一种工具,为解决数据分析任务而创建的,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具基本上你能用Excel或者Bi工具进行的数据处理,Pandas也都能实现,而且更快 In [ ]:......
  • N-皇后问题
    n−皇后问题是指将n个皇后放在n×n的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。现在给定整数n,请你输出所有的满足条件的棋子摆法。输入格式共一行,包含整数n。输出格式每个解决方案占n行,每行输出一个长度为n的字符串,用来表......