算法——八皇后
2017-03-26 21:19
295 查看
八皇后问题
这是一个经典递归问题,问题要求:在一个n*n的棋盘上摆放n个皇后,要求两个皇后不能出现在同一横排,纵列,斜线上。
下图是8*8的棋盘:
运用递归的方法可以很容易实现出来,得到结果显示这种棋盘n=8的情况下有92中摆放方式。
这是一个经典递归问题,问题要求:在一个n*n的棋盘上摆放n个皇后,要求两个皇后不能出现在同一横排,纵列,斜线上。
下图是8*8的棋盘:
运用递归的方法可以很容易实现出来,得到结果显示这种棋盘n=8的情况下有92中摆放方式。
#include <stdio.h> #include <stdlib.h> const int N = 8;// int queens = {0};//每一行都有且只有1个皇后,保存数据表示位于第几列 0~7 int count =1 ; void printqueen() { printf("case:%d\n",count); int i,j; for (i = 0;i<N ;i++ ) { printf("%d",queens[i]); } printf("\n=======棋盘=======:\n"); for (i = 0;i<N ;i++ ) { j = 0; while(j<queens[i]) { printf("0 "); j++; } printf("1 "); j = queens[i]+1; while(j<N) { printf("0 "); j++; } printf("\n"); } printf("==================\n"); } bool oneline(int order)//在一条线上false { int i=0; while(i<order) { if (queens[order] == queens[i]) return true; if(abs(queens[order] - queens[i]) == (order - i)) return true; i++; } return false; } void eightqueen(int num) { if (num >7) { printqueen(); count++; return; } int i; for (i = 0;i<N ;i++ ) { /* queens[num] = i; if(oneline(i,num))//第num行上位置i { continue; } else { //printf("queens[%d] = %d\n",num,queens[num]); eightqueen(num+1); }*/ queens[num] = i; if(!oneline(num)) eightqueen(num+1); } //getchar(); } int main() { eightqueen(0); return 0; }
相关文章推荐
- 八皇后问题 java实现,算法两则
- 八皇后算法题
- 算法问题-八皇后
- 八皇后问题的回溯算法
- 八皇后问题 C#版本算法 回溯法
- 一步一步写算法(之八皇后)
- 笔试算法题(01):字符串倒置 & 八皇后问题
- 八皇后 & 迷宫 算法
- C 数据算法 八皇后
- 算法-八皇后问题
- 【算法】八皇后问题 Python实现
- 从算法学起C语言--八皇后(位运算算法)
- 八皇后(N皇后)问题算法程序(回溯法)
- 数据结构与算法笔记 lesson 16 八皇后问题
- GDI+学习(7) 八皇后问题回溯算法演示系统
- 遗传算法解八皇后问题
- 算法竞赛入门-八皇后问题
- Java与算法之(6) - 八皇后问题
- 【 日常 】 八皇后算法 18年3月16日16:51 [ 11 ]
- 算法系列——八皇后问题