你的代码要改就全变了,自己给你看我的代码吧,差不多类型的。
#include
#include
#include
#include
#include
using namespace std;
const int maxn=10;
int col[maxn];
int row[maxn],num;
int left_lean[20],right_lean[20];
void print()
{
num++;
printf("第%d个\n",num);
for(int i=0;i<8;i++)
{
printf("第%d行,第%d列\n",i+1,row[i]+1);
}
printf("\n");
}
void dfs(int t)
{
if(t==8)
{
print();
return ;
}
for(int i=0;i<8;i++)
{
if(col[i])continue;//竖直方向上存在
if(right_lean[7-t+i])continue;//右斜方向上存在
if(left_lean[t+i])continue;//左斜方向上存在
col[i]=1;
right_lean[7-t+i]=1;
left_lean[i+t]=1;
row[t]=i;
dfs(t+1);
col[i]=0;
right_lean[7-t+i]=0;
left_lean[i+t]=0;
}
}
int main()
{
num=0;
memset(left_lean,0,sizeof(left_lean));
memset(right_lean,0,sizeof(right_lean));
memset(col,0,sizeof(col));
dfs(0);
printf("共%d个。\n",num);
}