大意:在一个8*8的棋盘上放八个皇后,要求他们不再同一行,不再同一列,不再同一个对角线上,总共有多少种不同的方案数。
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int col[10]= {0},sum=0;//col[i]=j表示第i行第j列放置皇后
int a[10][10]= {0};//存储图
void dfs(int row)
{
if(row==9)
{
sum++;
printf("case%d:\n",sum);
for(int i=1; i<=8; i++)
{
for(int j=1; j<=8; j++)
printf("%d",a[i][j]);
printf("\n");
}
printf("\n");
return;
}
for(int i=1; i<=8; i++)
{
bool flag=true;
col[row]=i;
a[row][i]=1;
for(int j=1; j<row; j++)
{
if(col[row]==col[j]||j-col[j]==row-col[row]||j+col[j]==row+col[row])//判断是否可行
{
flag=false;
break;
}
}
if(flag)
dfs(row+1);
a[row][i]=0;
}
}
int main(void)
{
dfs(1);
return 0;
}