标题:自己编的八皇后问题仅供参考
取消只看楼主
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
结帖率:100%
 问题点数:0 回复次数:0 
自己编的八皇后问题仅供参考
程序代码:
#include <stdio.h>

#define MAX 8
#define NUM 100000

int arr[MAX][MAX];
int result[NUM][MAX];

int tmp[MAX];

int res;

void init()
{
    int i,j;
    for(i=0;i<MAX;i++)
    {
        for(j=0;j<MAX;j++) arr[i][j]=0;
        tmp[i]=-1;
    }
    res=0;
}

void Attack(int x,int y,int inc)
{
    int i,j;
    for(i=0;i<MAX;i++) arr[i][y]+=inc;
    for(i=0;i<MAX;i++) arr[x][i]+=inc;
    for(i=x,j=y;i<MAX&&j<MAX;i++,j++) arr[i][j]+=inc;
    for(i=x,j=y;i>=0&&j>=0;i--,j--) arr[i][j]+=inc;
    for(i=x,j=y;i<MAX&&j>=0;i++,j--) arr[i][j]+=inc;
    for(i=x,j=y;i>=0&&j<MAX;i--,j++) arr[i][j]+=inc;
   

    arr[x][y]-=5*inc;
}

void Queen(int layer)
{
    int i;
    if(layer==MAX)
    {
        for(i=0;i<MAX;i++)
        {
            result[res][i]=tmp[i];
        }
        res++;
        return;
    }
    for(i=0;i<MAX;i++)
    {
        if(arr[layer][i]) continue;
        Attack(layer,i,1);
        tmp[layer]=i;
        Queen(layer+1);
        Attack(layer,i,-1);
        tmp[layer]=-1;
    }
}

int main()
{
    int i,j;
    init();
    Queen(0);
    for(i=0;i<res;i++)
    {
        for(j=0;j<MAX;j++) printf("%d ",result[i][j]);
        printf("\n");
    }
    printf("%d\n",res);
    return 0;
}



[ 本帖最后由 C_戴忠意 于 2012-4-16 21:06 编辑 ]
搜索更多相关主题的帖子: 皇后 问题 
2012-04-16 20:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-365953-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.830513 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved