资源简介
回溯实现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
评论
共有 条评论