| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1055 人关注过本帖
标题:求教八皇后问题
只看楼主 加入收藏
骓鲟
Rank: 2
等 级:论坛游民
帖 子:31
专家分:19
注 册:2009-6-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:13 
求教八皇后问题
怎样把8个棋子既不同在一列,有不同在一行,并且到达棋盘上的每个位置
搜索更多相关主题的帖子: 皇后 
2009-08-02 13:02
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:0 
百度搜索一下吧。。。
http://zhidao.baidu.com/question/17090864.html?fr=qrl
2009-08-02 13:32
骓鲟
Rank: 2
等 级:论坛游民
帖 子:31
专家分:19
注 册:2009-6-17
收藏
得分:0 
晕,你来白赚积分来啦
2009-08-02 19:38
soky
Rank: 4
等 级:业余侠客
帖 子:126
专家分:228
注 册:2009-7-13
收藏
得分:0 
题目说详细点,有点不懂
2009-08-02 21:55
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
要打印所有解吗?
2009-08-03 23:12
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:15 
程序代码:
#include <stdio.h>
int Map[8][8]={0},Horiz[8],p[15],q[15],m=0;

void Output(int*pm)
{
    int i,j;
    (*pm)++;
    printf("No.%d\n",*pm);
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
            if(Map[i][j])
                printf("* ");
            else
                printf("_ ");
        printf("\n");
    }
    printf("******************************************\n");
}

void SolveEightQueens(int n)
{
    int i;
    if(n==8)
        Output(&m);
    for(i=0;i<8;i++)
        if(Horiz[i]&&p[n+i]&&q[n-i+7])
        {
            Map[n][i]=1;
            Horiz[i]=0;
            p[n+i]=0;
            q[n-i+7]=0;
            SolveEightQueens(n+1);
            Map[n][i]=0;
            Horiz[i]=1;
            p[n+i]=1;
            q[n-i+7]=1;
        }
}

void main()
{
    for(int i=0;i<8;i++)
        Horiz[i]=1;
    for(i=0;i<15;i++)
    {
        p[i]=1;
        q[i]=1;
    }
    SolveEightQueens(0);
}


[[it] 本帖最后由 CrystalFan 于 2009-8-3 23:49 编辑 [/it]]

4.JPG (14.19 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2009-08-03 23:39
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
这是递归算法的入门题目。
2009-08-03 23:50
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:5 
程序代码:
#include<stdio.h>
int c[9][9]={0};
int n=8,x[20];
int ok(int k)
{ int i,t=1;
     for(i=1;i<k;i++)
      t=t&&x[i]!=x[k]&&x[i]-x[k]!=i-k&&x[i]-x[k]!=k-i;
     return t;
}
int f(int k)
{  int v=0,i,j;
     if(k>n)
     { v=1;
      for(i=1;i<=n;i++)printf("%d ",x[i]);
      printf("\n");
     }
     else
      for(j=1 ; j<=n ; j++)
      {   x[k]=j;
           if(ok(k))v+=f(k+1);
      }
     return v;
}
                    
int main()
{  int v;
     v=f(1);
     printf("\nv=%d\n",v);
     return 0;
}

生命不熄,战斗不止.
2009-08-04 09:34
骓鲟
Rank: 2
等 级:论坛游民
帖 子:31
专家分:19
注 册:2009-6-17
收藏
得分:0 
回复 6楼 CrystalFan

谢谢你,交个朋友吧,方便的话呵呵
2009-08-09 19:27
骓鲟
Rank: 2
等 级:论坛游民
帖 子:31
专家分:19
注 册:2009-6-17
收藏
得分:0 
回复 6楼 CrystalFan

哎我还是没有完全看懂,怎么办啊
2009-08-09 19:33
快速回复:求教八皇后问题
数据加载中...
 
   



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

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