`
zjjzmw1
  • 浏览: 1352483 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

8个皇后问题的C语言的解法。

    博客分类:
  • iOS
阅读更多

//

//  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"); 

 

}

1
0
分享到:
评论

相关推荐

    八皇后问题C语言解法

    八皇后问题的C语言程序解法,利用了回溯的思想

    八皇后问题的C语言程序

    八皇后问题的C语言解法,使用VS 2013编译通过并验证。

    n皇后问题解法

    解决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语言描述)

    8皇后问题的两种解法,C语言描述,有详细的注释和声明,通俗易懂

    八皇后问题的一种解法(C语言源代码)

    这个是八皇后问题的一种解法,希望可以给大家参考,有需要的话可以看一下哦!

    八皇后算法C语言实现

    八皇后C语言实现,并且输出82种解法,但是实现的过程不是太好,花了整整两天才写出来,

    八皇后递归解法

    八皇后问题是一种回溯思想的体现,可以用C语言里面的递归算法实现

    C语言版本的八皇后源代码

    最新的C语言代码,探索八皇后的解法 程序已经过精心调试,没有错误,请大家分享

    八皇后92种解C代码

    关于C语言中八皇后的解法,例如穷举法、试探法的非递归和递归实现

    课程设计实验——八皇后_VC++游戏

    该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。  高斯认为有76种方案。1854年在柏林的...

    递归应用C语言实现

    包含多个经典的递归应用代码: 1.fibonacci.c 是斐波拉契数列递归解法 2.hanoi.c 是汉诺塔递归算法 ...4.queen.c 是八皇后递归算法 5. reverse.c 是递归的测试代码 6.strlrn.c 是求字符串长度的递归算法

    八皇后问题

    1、能够快速的查找并显示八皇后的布局方式有多少种正确的方法; 2、能够逐个查看每种布局的结果; 3、能够很方便的改变皇后的个数,从而改变了棋盘的...5、通过对八皇后问题的操作,能够更好的对C语言基础知识的运用。

    数据结构与算法综合资料库

    N皇后问题 采用循环双向链表, 能实现多个长整型进行加法运算 插入排序法 程序设计:哈希表的一个应用 多维数组下标操作符重载一法 汉诺塔的非递归 回朔法一例 几道有趣的算法题 阶梯问题的递归解法 精确迭代法 矩阵...

Global site tag (gtag.js) - Google Analytics