八皇后问题。。。
#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;
}