//
// main.m
// HuangHou
//
// Created by apple on 14-2-14.
// Copyright (c) 2014年 apple. All rights reserved.
//
//#include<iostream.h>
#include<math.h>
#import <Foundation/Foundation.h>
#include "stdio.h"
//#include "windows.h"
#define N 8/* 定义棋盘大小 */
int place(int k); /* 确定某一位置皇后放置与否,放置则返回1,反之返回0 */
void backtrack(int i);/* 主递归函数,搜索解空间中第i层子树 */
void chessboard(); /* 每找到一个解,打印当前棋盘状态 */
staticint sum, /* 当前已找到解的个数 */
x[N]; /* 记录皇后的位置,x[i]表示皇后i放在棋盘的第i行的第x[i]列 */
int main(int argc, const char * argv[])
{
@autoreleasepool {
backtrack(0);
system("pause");
}
return 0;
}
int place(int k)
{
/* 测试皇后k在第k行第x[k]列时是否与前面已放置好的皇后相攻击。 x[j] == */
/* x[k] 时,两皇后在同一列上;abs(k - j) == abs(x[j] - x[k]) 时,两皇 */
/* 后在同一斜线上。两种情况两皇后都可相互攻击,故返回0表示不符合条件。*/
for (int j = 0; j < k; j ++)
if (abs(k - j) == abs(x[j] - x[k]) || (x[j] == x[k])) return 0;////这里只判断了两个相减的情况,相加的都不用判断,因为for循环的时候说了。小于,没有等于。。。。
return 1;
}
void backtrack(int t)
{
/* t == N 时,算法搜索至叶结点,得到一个新的N皇后互不攻击的放置方案 */
if (t == N) chessboard();
else
for (int i = 0; i < N; i ++) {
x[t] = i;
if (place(t)) backtrack(t + 1);///当前行有几种方法,就递归几次。。。
}
}
void chessboard()
{
printf("第%d种解法:\n", ++ sum);
for (int i = 0; i < N; i ++) {
for (int j = 0; j < N; j ++)
if (j == x[i]) printf("@ ");
else printf("* ");
printf("\n");
}
printf("\n");
}
相关推荐
八皇后问题的C语言程序解法,利用了回溯的思想
八皇后问题的C语言解法,使用VS 2013编译通过并验证。
解决n皇后的代码 #include #include #include #define _PRINT_ 0//没有输出具体的解,只是计算了总数。 #define MAXQ 100 long N, t; long qx[MAXQ], qy[MAXQ]; long quse; /* */ bool chk(int x, int y) //...
8皇后问题的两种解法,C语言描述,有详细的注释和声明,通俗易懂
这个是八皇后问题的一种解法,希望可以给大家参考,有需要的话可以看一下哦!
八皇后C语言实现,并且输出82种解法,但是实现的过程不是太好,花了整整两天才写出来,
八皇后问题是一种回溯思想的体现,可以用C语言里面的递归算法实现
最新的C语言代码,探索八皇后的解法 程序已经过精心调试,没有错误,请大家分享
关于C语言中八皇后的解法,例如穷举法、试探法的非递归和递归实现
该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的...
包含多个经典的递归应用代码: 1.fibonacci.c 是斐波拉契数列递归解法 2.hanoi.c 是汉诺塔递归算法 ...4.queen.c 是八皇后递归算法 5. reverse.c 是递归的测试代码 6.strlrn.c 是求字符串长度的递归算法
1、能够快速的查找并显示八皇后的布局方式有多少种正确的方法; 2、能够逐个查看每种布局的结果; 3、能够很方便的改变皇后的个数,从而改变了棋盘的...5、通过对八皇后问题的操作,能够更好的对C语言基础知识的运用。
N皇后问题 采用循环双向链表, 能实现多个长整型进行加法运算 插入排序法 程序设计:哈希表的一个应用 多维数组下标操作符重载一法 汉诺塔的非递归 回朔法一例 几道有趣的算法题 阶梯问题的递归解法 精确迭代法 矩阵...