鱼C论坛

 找回密码
 立即注册
查看: 4096|回复: 2

八皇后问题

[复制链接]
发表于 2014-11-15 18:08:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
八皇后问题,头疼了三天
依然不知道如何写判断(写过一个笨方法,下皇后之后立刻对横竖及斜方向标记,事实上不行)

网上找到一段代码,巧妙的程度令人乍舌,但就是因为太巧妙了,几乎看不清楚作者的模型
作者已联系不上了,下面贴上这段代码,望有人能分析出原作者的模型
或者留言写下如何判断皇后放置位置的方法也行,感激不尽


以下是网上的源代码,可直接执行:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
#define N 8 //皇后数=棋盘行列数
int a[N]; //a[i]为第i行皇后所在列
void show() //图形化输出
{
        int i;
        int p, q;
        int b[N][N] = { 0 };
        static t = 1;
        printf("第%d个解为: ", t++);
        for (i = 0; i<N; i++)
        {
                b[i][a[i]] = 1;
                printf("(%d,%d) ", i, a[i]);
        }
        printf("\n");
        for (p = 0; p<N; p++)
        {
                for (q = 0; q<N; q++)
                {
                        if (b[p][q] == 1)
                                printf("●");
                        else
                                printf("○");
                }
                printf("\n");
        }
}
int check(int n) //满足条件返回1,否则返回0
{
        int i;
        for (i = 0; i<n; i++)
        {
                if (a[i] == a[n] || fabs(n - i) == fabs(a[i] - a[n])) //at the same column or diagonal (对角线)
                        return 0;
        }
        return 1;
}
void put(int n) //在第n行放置第n个皇后
{
        int i;
        if (n == N)
                return;
        for (i = 0; i<N; i++)
        {
                a[n] = i;
                if (check(n)) //位置合法
                {
                        if (n == N - 1) //皇后全部放置完毕
                                show();
                        else
                                put(n + 1);
                }
        }
}
int main()
{
        put(0);
        return 0;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-15 19:15:32 | 显示全部楼层
我记得好像可以用for循环出来  不知道对不对 ,我只是菜鸟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-16 11:30:50 | 显示全部楼层
看不懂,一想就头疼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 17:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表