8 皇后的问题写了个程序 但是不知道问题在哪里
#include <iostream>
using namespace std;
int a[8];
int dfs(int column,int row,int value);
void digui(int column);
int n=0;
int k=0;
int main()
{
// cout << "Hello World!" << endl;
for(int i=0;i<8;i++)
{
int a[8]={0,0,0,0,0,0,0,0};
a[0]=i;
digui(1);
}
cout<<n<<endl;
cout<<k<<endl;
cout<<"ssssss"<<endl;
return 0;
}
//判断位置是否合适
int dfs(int column, int value)
{
for(int i=0;i<column;i++)
{
if(value==a[i])
{
return 0;
}
}
for(int i=0;i<column;i++)
{
if(value==(column-i+a[i]))
{
return 0;
}
}
for(int i=0;i<column;i++)
{
if(value==(i-column+a[i]))
{
return 0;
}
}
return 1;
}
void digui(int column)
{
for(int value=0;value<8;value++)
{
if(dfs(column,value))
{
a[column]=value;
if(column==8)
{
for(int j=0;j<8;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
n++;
}
else
{
digui(++column);
}
}
}
}
[code=C/C++][/code]
[解决办法]
单步跟踪不方便的话,在怀疑有问题的地方加
printf输出相关变量的值
getch暂停执行按任意键继续
[解决办法]
#include <iostream>using namespace std;int a[8];int dfs(int column,int value);void digui(int column);int n=0;int k=0;int main(){// cout << "Hello World!" << endl; for(int i=0;i<8;i++) {// int a[8]={0,0,0,0,0,0,0,0}; //这里重定义了 a[0]=i; digui(1); } cout<<n<<endl; cout<<k<<endl; cout<<"ssssss"<<endl; system("pause"); return 0;}//判断位置是否合适int dfs(int column, int value){ int i; for(i=0;i<column;i++) { if(value==a[i]) { return 0; } } for(i=0;i<column;i++) { if(value==(column-i+a[i])) { return 0; } } for(i=0;i<column;i++) { if(value==(i-column+a[i])) { return 0; } } return 1;}void digui(int column){ for(int value=0;value<8;value++) { if(dfs(column,value)) { a[column]=value; if(column==7) //这里正确是应该是7不是8 { for(int j=0;j<8;j++) { cout<<a[j]<<" "; } cout<<endl; n++; return; } else { digui(column+1);不需要该colnumn的值,所以用column+1,而不是++column } } }}