C和指针之数组编程练习8(8皇后问题)
来源:互联网 发布:淘宝美工如何做首页 编辑:程序博客网 时间:2024/06/05 15:08
1、问题
*在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击
*即任意两个皇后都不能处于同一行、同一列或同一斜线上,
*问有多少种摆法,并把所有合法的二维数组打印出来
*即任意两个皇后都不能处于同一行、同一列或同一斜线上,
*问有多少种摆法,并把所有合法的二维数组打印出来
2、代码实现
#include <stdio.h>#include <stdlib.h>/** *在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击 *即任意两个皇后都不能处于同一行、同一列或同一斜线上, *问有多少种摆法,并把所有合法的二维数组打印出来 */#define M 8int matrix[M + 1][M + 1] = {0};//检查这行的皇后是否与上面的行里面的皇后相冲突//返回0就是相冲突,返回1就是不冲突,参数i,j就是//需要检验这个皇后的下标int is_legal(int (*matrix)[M + 1], int i, int j){ for (int k = 1; k <= i - 1; k++) { for (int l = 1; l <= M; l++) { //判断之前的皇后 if (matrix[k][l] == 1) { if (abs(i - k) == abs(j - l) || l == j) return 0; } } } return 1;}//打印有能组成皇后的数组void my_printf(int (*matrix)[M + 1]){ static int count = 0; printf("count is %d\n", ++count); for (int i = 1; i <= M; ++i) { for (int j = 1; j <= M; ++j) { matrix[i][j] == 1 ? printf("1 ") : printf("0 "); } printf("\n"); } printf("\n");}void queen(int i){ if (i > M) my_printf(matrix); else for (int j = 1; j <= M; ++j) { matrix[i][j] = 1; if (is_legal(matrix, i, j)) queen(1 + i); matrix[i][j] = 0; }}int main(){ queen(1); return 0;}
3、运行结果
1111deMacBook-Pro:dabian a1111$ vim queen.c 1111deMacBook-Pro:dabian a1111$ gcc -g queen.c -o queen1111deMacBook-Pro:dabian a1111$ ./queen
count is 910 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 count is 920 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0
阅读全文
0 0
- C和指针之数组编程练习8(8皇后问题)
- C和指针之数组之编程练习2
- C和指针之数组编程练习5 (矩阵相乘)
- C语言编程(练习8:数组与指针)
- C和指针之数组编程练习3(判断矩阵是否为单位矩阵)
- C语言编程(练习1:数组和指针)
- C语言编程(练习2:数组和指针)
- C和指针-编程练习
- 《c和指针》笔记--八皇后问题
- C和指针之字符串编程练习1
- C和指针之字符串编程练习6
- C和指针之字符串编程练习3
- C常见问题之字符串数组和字符指针数组问题
- C和指针之字符串编程练习8实现char *my_strnchr(char const *str, int ch, int which)
- 8皇后问题和N皇后问题
- 8皇后-----回溯法C++编程练习
- C专家编程学习之第四章 数组和指针
- C和指针第四章编程练习
- 【小白的CFD之旅】07 CFD常识
- 粒子物理蒙特卡罗模拟库Geant4开发之一个实例
- poj
- 【小白的CFD之旅】08 CFD速成之道
- 【Swish激活函数】
- C和指针之数组编程练习8(8皇后问题)
- Scrapy爬虫地位与应用展望
- 苦啊!!!!
- Service详解
- 如何在SolidWorks中截出高清质量的图片
- 在安装setuptools工具时出现缺少zlib module
- 网卡驱动更新猎奇
- 03.Java语言基本语法之运算符,算数、赋值、比较、逻辑、位、三元运算等
- c++与python 数据类型对应