• 大小: 319KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-25
  • 语言: C/C++
  • 标签:

资源简介

回溯实现n后问题,用c语言实现,默认定义皇后个数为五个,可以自己定义,输出排列结果,本程序只是简单的利用回溯法实现五皇后问题,

资源截图

代码片段和文件信息

#include 
#include
#include



#define N 5 /* 定义棋盘大小 */

static int sum; /* 当前已找到解的个数 */

static int x[N]; /* 记录皇后的位置x[i]=j表示皇后放在棋盘的第i行的第j列 */


/* 确定某一位置皇后放置与否放置则返回1反之返回0 */
int place(int k)
{
    int j; 
    /* 测试皇后k在第k行第x[k]列时是否与前面已放置好的皇后相攻击. x[j] == */
    /* x[k] 时,两皇后在同一列上;abs(k - j) == abs(x[j] - x[k]) 时,两皇 */
    /* 后在同一斜线上。两种情况两皇后都可相互攻击,故返回0表示不符合条件。*/
    for (j = 0; j < k; j ++)
        if (x[j] == x[k] || abs(j - k) == abs(x[j] - x[k])) return 0;

    return 1;
}

/* 打印棋局 */ 
void chessboard()
{
    int ij;
     printf(“第%d种解法:\n“ ++ sum); 
     for (i = 0; i < N; i ++) {
         for (j = 0; j < N; j ++)
             if (j == x[i]) printf(“Q   “);
             else printf(“*   “);
         printf(“\n“);
     }
     printf(“\n“);
}

/* 回溯搜索解空间 */
void backtrack()
{
    int k = 0;

    x[0] = -1;
    while (k >= 0) {
        x[k] += 1; /* 向右移一列 */
        /* 向右移至出最右列或可以放置皇后的列 */
        while ((x[k] < N) && !(place(k))) x[k] += 1;
        if (x[k] < N) /* 向右移未移出棋盘 */
            if (k == N - 1) chessboard(); /* 已移至最后一行 */
            else x[++ k] = -1; /* 向下移一行 */
        else k --; /* 回溯到上一行 */
    }
}



int main(void)
{
    backtrack();
    getch();
    return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        520  2009-12-30 20:34  c实现n后问题\算法二.dsw

     文件      33792  2009-12-30 20:49  c实现n后问题\算法二.ncb

     文件      33792  2010-01-04 15:08  c实现n后问题\Debug\vc60.idb

     文件      45056  2010-01-04 15:08  c实现n后问题\Debug\vc60.pdb

     文件     203616  2009-12-30 20:36  c实现n后问题\Debug\算法二.pch

     文件     185012  2009-12-30 20:37  c实现n后问题\Debug\算法二.ilk

     文件     180267  2009-12-30 20:37  c实现n后问题\Debug\算法二.exe

     文件     435200  2009-12-30 20:37  c实现n后问题\Debug\算法二.pdb

     文件     188848  2010-01-04 15:08  c实现n后问题\Debug\e.ilk

     文件     180262  2010-01-04 15:08  c实现n后问题\Debug\e.exe

     文件     435200  2010-01-04 15:08  c实现n后问题\Debug\e.pdb

     文件     223616  2009-12-31 00:56  c实现n后问题\Debug\e.pch

     文件       4799  2010-01-04 15:08  c实现n后问题\Debug\e.obj

     文件        883  2009-12-30 20:37  c实现n后问题\算法二.plg

     文件      48640  2009-12-30 20:49  c实现n后问题\算法二.opt

     文件       4279  2009-12-30 20:49  c实现n后问题\算法二.dsp

     文件      41984  2010-01-04 15:09  c实现n后问题\e.ncb

     文件        721  2010-01-04 15:08  c实现n后问题\e.plg

     文件       3341  2010-01-04 15:08  c实现n后问题\e.dsp

     文件       1485  2010-01-04 15:08  c实现n后问题\e.cpp

     文件      48640  2010-01-04 15:09  c实现n后问题\e.opt

     文件        510  2010-01-04 15:09  c实现n后问题\e.dsw

     目录          0  2009-12-30 20:34  c实现n后问题\Debug

     目录          0  2009-12-30 20:34  c实现n后问题

----------- ---------  ---------- -----  ----

              2300463                    24


评论

共有 条评论

相关资源