首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

八皇后有关问题。

2012-03-05 
八皇后问题。。。#include iostreamusingnamespacestdconstintn8intstack[n+1],iintlintatt(){intjfo

八皇后问题。。。
#include <iostream>
using   namespace   std;
const   int   n=8;
int   stack[n+1],i;
int   l;

int   att()
{
          int   j;
          for(j=1;j <l;j++)
                if(   ((abs(l-j)==abs(stack[j]-i))     ||     (i==stack[j])     ))
                              {
                                  return   1;
                                  break;
                              }
  return   0;
}

void   make(int   l)
{
      int   j;
          static   int   total=0;
          if(l==n+1)  
          {
                total++;
                cout < < "No " < <total;
                for(j=1;j <n+1;j++)   cout < < "第 " < <j < < "行皇后列位置为: " < <stack[j] < < '\t ';
                cout < <endl;
          }  
          for(i=1;i <=n;i++)
          {
                int   temp;
stack[l]=i;
temp=att();
if(!temp)   make(l+1);
          }
}


int   main()
{
        make(1);
        return   0;
}
       

很标准的程序。。。怎么运行结果不对。。。

[解决办法]
//可以了,有改动的地方我标出来了,你自己比较一下
#include <iostream>
using namespace std;

const int n=8;
int stack[n+1]; //去掉全局变量i

int att(int l) //函数增加了一个参数
{
int j;
for(j=1;j <l;j++)
if( ((abs(l-j)==abs(stack[j]-stack[l])) || (stack[l]==stack[j]) ))//这是改动最大的地方
{
return 1;
}
return 0;
}

void make(int l)
{
int j;
static int total=0;
if(l==n+1)
{
total++;
cout < < "No " < <total < <endl;
for(j=1;j <n+1;j++) cout < < "第 " < <j < < "行皇后列位置为: " < <stack[j] < < '\n ';
cout < <endl;
return ;
}
for(int i=1;i <=n;i++)
{
stack[l]=i;
if(!att(l)) make(l+1); //去掉了多余的变量
}
}

int main()
{
make(1);
return 0;
}

热点排行