| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 401 人关注过本帖
标题:自己编的八皇后问题仅供参考
取消只看楼主 加入收藏
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
快速回复:自己编的八皇后问题仅供参考
数据加载中...
 
   



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

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