数据结构与算法笔记 lesson 16 八皇后问题
来源:互联网 发布:网络8888端口 编辑:程序博客网 时间:2024/06/05 16:43
八皇后问题
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
#include<stdio.h>int count = 0;int notDanger(int row, int j, int(*chess)[8]){int i ,k,flag1=0, flag2 = 0, flag3 = 0, flag4 = 0, flag5 = 0;//判断列方向 如果该列有皇后,则某个列的横坐标为1for (i = 0; i < 8; i++){if (*(*(chess + i) + j) != 0){flag1 = 1;break;}}//判断左上方for (i = row, k = j; i >= 0 && k >= 0; i--, k--){if (*(*(chess + i) + k) != 0){flag2 = 1;break;}}//判断右下方for (i = row, k = j; i <8 && k<8; i++, k++){if (*(*(chess + i) + k) != 0){flag3 = 1;break;}}//判断右上方for (i = row, k = j; i >=0&& k<8; i--, k++){if (*(*(chess + i) + k) != 0){flag4 = 1;break;}}//判断左下方for (i = row, k = j; i <8 && k>=0; i++, k--){if (*(*(chess + i) + k) != 0){flag5 = 1;break;}}if (flag1 || flag2 || flag3 || flag4 || flag5){return 0;}else{return 1;}}//row :表示起始行 n:表示列数 (*chess)[8]: 表示指向棋盘每一行的指针 void EightQueen(int row, int n, int(*chess)[8]){int chess2[8][8], i, j;for (i = 0; i < 0; i++){for (j = 0; j < 8; j++){chess2[i][j] = chess[i][j];}}if (8 == row){printf("第%d种\n", count + 1);for (i = 0; i < 8; i++){for (j = 0; j < 8; j++){printf("%d", *(*(chess2 + i) + j));//chess[i][j]}printf("\n");}printf("\n");count++;}else{for (j = 0; j < n; j++){if (notDanger(row,j,chess)) //判断是否危险{//如果不危险,摆放皇后for (i = 0; i < 8; i++){*(*(chess2 + row) + i) = 0;}*(*(chess2 + row) + j) = 1;EightQueen(row+1 , n, chess2);}}}}int main(){int chess[8][8], i, j;for (i = 0; i < 8; i++){for (j = 0; j < 8; j++){chess[i][j] = 0;}}EightQueen(0,8,chess);printf("总共有%d种\n", count);return 0;}
0 0
- 数据结构与算法笔记 lesson 16 八皇后问题
- 数据结构与算法2:八皇后问题
- 【数据结构与算法】八皇后问题之递归
- 算法与数据结构-回溯法及八皇后问题求解
- 数据结构与算法Java版——八皇后问题
- C++数据结构--回溯算法--八皇后问题
- 《数据结构和算法》之八皇后问题
- 数据结构-八皇后算法
- 数据结构与算法笔记 lesson 9 栈
- 数据结构与算法笔记 lesson 13 队列
- 数据结构与算法笔记 lesson 15 递归
- 数据结构与算法笔记 lesson 18 树
- 八皇后问题与回溯算法
- 八皇后问题与回溯算法
- 八皇后问题[算法]
- 八皇后问题算法
- 算法问题-八皇后
- 算法--八皇后问题
- 第五章 函数
- eclipse修改工程名称
- python数据类型
- android uiautomator 一个截屏并且以当前时间命名图片名的方法
- WIFI相关
- 数据结构与算法笔记 lesson 16 八皇后问题
- Qt中显示一个窗体的方法
- 还在使用 Synchronized同步?试试 Volatile 吧,让你的代码更高效
- php 求一个无序数组经过排列后任意两个相邻元素之差的最大值(算法)
- 远程代答系统的使用方法
- 使用Jersey客户端请求Spring Boot(RESTFul)服务
- centOS7安装matlab2014a
- 《增长黑客》读书笔记
- linux 下删除文件中的前三列 (也就是取第四列到最后一列的内容)