| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 465 人关注过本帖
标题:可以请高手帮我配上这个八皇后问题解法的注释么,希望详尽一点,菜鸟希望完 ...
只看楼主 加入收藏
王小行
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-6-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
可以请高手帮我配上这个八皇后问题解法的注释么,希望详尽一点,菜鸟希望完全弄懂
#include <stdio.h>
#include <math.h>
int count=0;
void empress(int *position)
{
    int i,j,flag;
    while(position[8]!=1)
    {
        ++position[0];
        for(i=0;i<8;++i)
        {
            if(position[i]==8)
            {
                position[i]=0;
                ++position[i+1];
            }
        }
        flag=1;//判断结果是否满足条件
        for(i=0;i<8;++i)
        {
            for(j=0;j<8;++j)
            {
                if(i!=j)
                {
                    if(position[i]==position[j])
                        flag=0;
                    else if(abs(position[i]-position[j])==abs(i-j))
                        flag=0;
                }
            }
        }
        if(flag==1)//输出#代表皇后                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
        {
            for(i=0;i<8;++i)
            {
                for(j=0;j<8;++j)
                {
                    if(position[i]==j)
                        printf("1");
                    else
                        printf("0");
                }
                printf("\n");
            }
            printf("\n");
        }
        count+=flag;
    }
}
int main()
{
    int position[9]={0};
    empress(position);
    printf("%d种解\n",count);
    return 0;
}
搜索更多相关主题的帖子: position include count 
2013-06-23 10:10
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:20 
#include <stdio.h>
#include <math.h>

//定义全局变量,用以计数
 int count=0;

 //主算法(递归思想)
 void empress(int *position)
 {
     //i,j是循环控制变量,flag是开关变量
     int i,j,flag;

     //这段我再看看
     while(position[8]!=1)
     {
         ++position[0];
         for(i=0;i<8;++i)
         {
             if(position[i]==8)
             {
                 position[i]=0;
                 ++position[i+1];
             }
         }
         flag=1;

         //判断是否形成攻击
        for(i=0;i<8;++i)
         {
             for(j=0;j<8;++j)
             {
                 //两皇后在不同行的时候
                 if(i!=j)
                 {
                     //如果在同一列
                     if(position[i]==position[j])
                         flag=0;//形成了攻击,改变开关变量(off)

                     //如果在同一对角线
                     else if(abs(position[i]-position[j])==abs(i-j))
                         flag=0;//形成攻击,改变开关变量(off)
                 }
             }
         }

        
         if(flag==1)//输出1代表皇后                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
         {
             //对结果进行打印,就是把一维的数据对应到一个二维的表现形式上,这部分不难。
             for(i=0;i<8;++i)
             {
                 for(j=0;j<8;++j)
                 {
                     if(position[i]==j)
                         printf("1");
                     else
                         printf("0");
                 }
                 printf("\n");
             }
             printf("\n");
         }
         count+=flag;
     }
 }
 int main()
 {
     //定义一个一维数组用来存放每一列上皇后在第几行
     //首先你要明确一点,在8*8的布局上,每一列是有且仅有一个皇后的
     //所以你只需要记录每一列皇后在第几行上就ok了。
     //所以用一个一维的数组解决这个问题。
     int position[9]={0};

     empress(position);

     printf("%d种解\n",count);

     return 0;
 }

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-23 11:04
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
竟然忘了给你继续解释了。。

罪过罪过。。

https://bbs.bccn.net/thread-414535-1-1.html

里面找找,有八皇后的代码。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-07-07 22:51
快速回复:可以请高手帮我配上这个八皇后问题解法的注释么,希望详尽一点,菜鸟希 ...
数据加载中...
 
   



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

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