数据结构之N皇后问题(C语言)
一、N皇后问题的概念
n 皇后问题,研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 一个皇后可以向水平、垂直以及向斜对角方向移动,如果一个皇后出现在另一个皇后的同一行,同一列或者斜对角,那它就可以被这个皇后攻击。可以通过列举出在棋盘上所有的情况,然后判断每个组合是不是符合的条件。
二、代码步骤
1、对皇后位置对错的判断
2、递归实现N皇后位置的排列
3、定义N皇后的指针并初始化
4、代码入口
5、运行结果
三、代码功能
1、对皇后位置对错的判断
bool place(int* paraSolution, int paraT)
{int j;for(j = 1;j < paraT;j++){if(abs(paraT-j) == abs(paraSolution[paraT]-paraSolution[j]) || paraSolution[paraT] == paraSolution[j])return 0; }return 1;
2、递归实现N皇后位置的排列
void backtracking(int* paraSolution,int paraN,int paraT)
{int i;if(paraT > paraN){for(i = 1; i <= paraN; i++){printf("%d ",paraSolution[i]);//打印出每种符合条件的情况}printf("\r\n");}else{for(i = 1;i <= paraN; i++){paraSolution[paraT] = i;if(place(paraSolution,paraT)){backtracking(paraSolution,paraN,paraT+1);}}}
}
3、定义N皇后的指针并初始化
void nQueen(int paraN)
{int i;int* solution = (int*)malloc((paraN + 1) * sizeof(int));for(i = 0;i <= paraN; i++){solution[i] = 0;}backtracking(solution, paraN ,1);
}
4、代码入口
int main()
{nQueen(5);return 1;
}
5、运行结果
1 3 5 2 4
1 4 2 5 3
2 4 1 3 5
2 5 3 1 4
3 1 4 2 5
3 5 2 4 1
4 1 3 5 2
4 2 5 3 1
5 2 4 1 3
5 3 1 4 2
四、整体代码
#include <stdio.h>
#include <malloc.h>
#include <math.h>bool place(int* paraSolution, int paraT)
{int j;for(j = 1;j < paraT;j++){if(abs(paraT-j) == abs(paraSolution[paraT]-paraSolution[j]) || paraSolution[paraT] == paraSolution[j])return 0; }return 1;
}void backtracking(int* paraSolution,int paraN,int paraT)
{int i;if(paraT > paraN){for(i = 1; i <= paraN; i++){printf("%d ",paraSolution[i]);}printf("\r\n");}else{for(i = 1;i <= paraN; i++){paraSolution[paraT] = i;if(place(paraSolution,paraT)){backtracking(paraSolution,paraN,paraT+1);}}}
}void nQueen(int paraN)
{int i;int* solution = (int*)malloc((paraN + 1) * sizeof(int));for(i = 0;i <= paraN; i++){solution[i] = 0;}backtracking(solution, paraN ,1);
}int main()
{nQueen(5);return 1;
}
数据结构之N皇后问题(C语言)相关推荐
- 数据结构源码笔记(C语言描述)汇总
数据结构源码笔记(C语言):英文单词按字典序排序的基数排序 数据结构源码笔记(C语言):直接插入排序 数据结构源码笔记(C语言):直接选择排序 数据结构源码笔记(C语言):置换-选择算法 数据结构源码 ...
- 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
//实现英文单词按字典序排序的基数排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#defin ...
- 数据结构源码笔记(C语言):索引文件建立和查找
//实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...
- 数据结构源码笔记(C语言):快速排序
//实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...
- 数据结构源码笔记(C语言):冒泡排序
//冒泡排序算法实现 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...
- 数据结构源码笔记(C语言):希尔插入排序
//实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...
- 数据结构源码笔记(C语言):直接插入排序
//实现直接插入排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...
- 数据结构源码笔记(C语言):直接选择排序
//实现直接选择排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...
- 数据结构源码笔记(C语言):置换-选择算法
//实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...
- 数据结构源码笔记(C语言):Huffman树字符编码
#include <stdio.h> #include<string.h> #define N 10 /*待编码字符的个数,即树中叶结点的最大个数*/ #define M 2* ...
最新文章
- 年薪 50w,这门编程语言该怎么学?
- 让IE6、IE7、IE8支持CSS3的圆角、阴影样式
- 最大公因数、最小公倍数、因式分解
- Spark-shell和Spark-hive的使用
- 正则表达式从入门到实战
- 列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
- flask v0.1 路由
- myeclipse ctrl + 鼠标单击 出现 source not found
- 学习python第一天总纲
- mysql提高运行效率_提升Mysql执行效率的SQL优化技巧汇总
- python打印购物清单_实例9:用Python自动生成Excel档每日出货清单
- drupal主题_50个精心挑选的美丽Drupal 6个主题
- java批量图片下载+打包成zip格式
- 若依前后端分离项目图片上传后访问404问题
- [原创]自定义公历农历日期选择器
- 设计公司怎样合理税收筹划,可以享受哪些税收政策?
- 微信公众号文章爬取 java
- (DP)codeforces - 710E Generate a String
- sql——字符串处理
- 8月30日科技联播:子弹短信总激活用户超过400万,亚马逊将成第2个万亿美元市值企业...
热门文章
- 三本全国计算机考研难度,三本大学的学生考211的研究生很难吗?
- android开发apk在qq发送无法正常安装的问题
- 【编译原理】学习笔记1 词法分析
- C++ 多线程: WaitForSingleObject(m_hEvent,INFINITE) ;
- 什么是.ink 域名?.ink 域名有什么价值优势?
- 计算机公开课教学反思,《让我们荡起双桨》公开课教学反思
- 批量获取微信公众号文章里的图片
- i2c设备驱动(ds1337实例:内核代码)
- 1.1 Linux发展史、内核版本和发行版本
- 简述thinkphp自带队列think-queue的使用以及通过supervisor实现常驻进程