鬼之魂吧 关注:31贴子:2,191
  • 7回复贴,共1

【C语言】八皇后

只看楼主收藏回复

#include<cstdio>
#include<cstdlib>
using namespace std;
bool a[9]; //行数
bool b[15];//行-列
bool c[17];//行+列
int sum=0;
void f(int i)//i代表行数
{
if(i>8)
{
++sum;//记次数
return;
}
else
for(int j=1;j<=8;j++)//j代表列数
{
if(a[j]&&b[i-j+7]&&c[i+j])
{
a[j]=b[i-j+7]=c[i+j]=false;
f(i+1);
a[j]=b[i-j+7]=c[i+j]=true;
}
}
}
int main()
{
for(int i=1;i<=8;i++)a[i]=true;
for(int i=0;i<=14;i++)b[i]=true;
for(int i=2;i<=16;i++)c[i]=true;
f(1);
printf("%d\n",sum);
system("pause");
return 0;
}


1楼2013-11-16 16:48回复
    http://item.taobao.com/item.htm?spm=a230r.1.14.37.BbWAat&id=19204702984
    【信息学奥数一本通


    2楼2013-11-16 16:49
    回复
      2025-05-20 20:13:28
      广告
      #include<cstdio>
      #include<cstdlib>
      using namespace std;
      bool a[9];
      bool b[15];
      bool c[17];
      int d[9];//记列数
      int sum=0;
      void f(int i)
      {
      if(i>8)
      {
      ++sum;
      printf("%d: ",sum);
      for(int j=1;j<=8;j++)
      printf("%d ",d[j]);
      printf("\n\n");
      }
      for(int j=1;j<=8;j++)
      {
      if(a[j]&&b[i-j+7]&&c[i+j])
      {
      a[j]=b[i-j+7]=c[i+j]=false; d[i]=j;
      f(i+1);
      a[j]=b[i-j+7]=c[i+j]=true;
      }
      }
      }
      int main()
      {
      for(int i=1;i<=8;i++)a[i]=true;
      for(int i=0;i<=14;i++)b[i]=true;
      for(int i=2;i<=16;i++)c[i]=true;
      f(1);
      system("pause");
      return 0;
      }
      【可以列出所有解法


      3楼2013-11-16 16:50
      回复
        啥。。。。。(≥3≤)/


        IP属地:江苏4楼2013-11-16 17:21
        收起回复
          话说我最近在解一个24点的c语言问题= =到现在还没想出怎么编
          ﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉
          “我有一个秘密。”
          “是什么?”
          “总有一天,你会知道。”
          ✎﹍﹍₯㎕℡﹍﹍


          5楼2013-11-21 22:00
          回复