N皇后问题(nQueue)、BackTracking、数据结构与算法分析
来源:互联网 发布:centos安装sftp 编辑:程序博客网 时间:2024/06/05 15:46
- 区别于穷举法,回溯是有顺序有逻辑的,不罗列出,而是通过“某一步不合理性“,可以推翻这一步”相连的方案“;
- 在编码中,当一种子方案不合适是,进行所谓”回溯“一定要记得消除子方案的影响,此n_Queue即为对棋盘的标识;
代码说明:
- QueueNUM为行列数;
- 结束标志是SetQueue的测试行数刚超过范围,说明之前[0,QueueNUM-1]行都成功插入了,此时打印
#include <stdio.h>#include <stdlib.h>#include <math.h>#define QueueNUM 4void InitializeP(int [][QueueNUM],int start);//start为开始置为0的开始行数void printQueue(int [][QueueNUM]);int safePlace(int,int,int [][QueueNUM]);void SetQueue(int,int [][QueueNUM]);int main(){ int Board[QueueNUM][QueueNUM]; InitializeP(Board,0); printQueue(Board); SetQueue(0,Board); return 0;}void SetQueue(int row,int A[][QueueNUM]){ int i; if(row==QueueNUM)//base case:输入序位 printQueue(A); else { for(i=0;i<QueueNUM;i++) if(safePlace(row,i,A)) { A[row][i]=1; SetQueue(row+1,A);//开始递归,在下一行插入 //递归结束时,影响的位置要重新归零 InitializeP(A,row); } }}void InitializeP(int A[][QueueNUM],int start){ int i,j; for(i=start;i<QueueNUM;i++) for(j=0;j<QueueNUM;j++) A[i][j]=0;}void printQueue(int A[][QueueNUM]){ int i,j; for(i=0;i<QueueNUM;i++) { for(j=0;j<QueueNUM;j++) printf("%2d",A[i][j]); printf("\n"); } printf("\n");}int safePlace(int row,int col,int A[][QueueNUM]){ int i,j; for(i=0;i<QueueNUM;i++) if(A[row][i]!=0||A[i][col]!=0) return 0; for(i=1,j=1;i<=row&&j<=col;i++,j++) if(A[row-i][col-i]!=0) return 0; for(i=1,j=1;i<QueueNUM-row&&j<QueueNUM-col;i++,j++) if(A[row+i][col+i]!=0) return 0; for(i=1,j=1;row-i>=0&&col+j<QueueNUM;i++,j++) if(A[row-i][col+j]!=0) return 0; for(i=1,j=1;j<=col&&i+row<QueueNUM;i++,j++) if(A[row+i][col-j]!=0) return 0; return 1;}
0 0
- N皇后问题(nQueue)、BackTracking、数据结构与算法分析
- 回溯算法(BackTracking)--八皇后问题
- 回溯算法(BackTracking)--八皇后问题
- 算法设计与分析--N皇后问题实现程…
- 算法分析与设计回溯法之n皇后问题
- 【数据结构】算法6.16 N皇后问题
- 【算法分析】回溯法解八皇后问题(n皇后问题)
- [数据结构] N皇后问题
- 回溯算法与N皇后问题
- 【数据结构与算法】backtracking 回溯法
- 数据结构与算法2:八皇后问题
- N皇后问题算法
- N皇后问题算法
- 【算法】n皇后问题
- 算法-n皇后问题
- 算法 N皇后问题
- 算法分析与设计实验三 回溯法 24点问题 n皇后问题
- 四皇后问题代码注析 数据结构与算法分析 张琨
- Oralce GoldenGate与Kafka集群集成
- 报数去除集合中的元素
- Leetcode 14 Longest Common Prefix
- SSL Certificate[Let's Encrypt]
- linux文件操作
- N皇后问题(nQueue)、BackTracking、数据结构与算法分析
- 一个页面从输入url到页面加载显示完成,这个过程都发生了什么?
- 公正的选举Unbiased election 《算法》2.5.16, 检测稳定性 《算法》2.5.17 , 强制稳定 《算法》2.5.18, Kendall tau距离 《算法》2.5.19
- noip2016年初赛总结与反思
- XAMPP下通过pypmyadmin连接数据库出错问题及解决
- c 数据结构 顺序串
- Mysql中的锁机制
- 傅里叶理解
- 89. Gray Code