第一种
#include <stdio.h>
#include <math.h>
static int chess[8][8] = {0};
static int mac = 1;
int a,b,c,d,e,f,g,h,count;
bool isvalid(int j ,int k) //j 行, k列
{
for (int i = 0; i < j; i++) //0 到 j-1行
{
if (1 == chess[i][k]) //判断与chess[0][a]在同列
{
return false;
}
if (0 == i) //判断与chess[0][a]在同一斜列
{
if(j == abs(k-a))
{
return false;
}
}
if (1 == i) //判断与chess[1][b]在同一斜列
{
if((j-1) == abs(k-b))
{
return false;
}
}
if (2 == i) //判断与chess[2][c]在同一斜列
{
if((j-2) == abs(k-c))
{
return false;
}
}
if (3 == i) //判断与chess[3][d]在同一斜列
{
if((j-3) == abs(k-d))
{
return false;
}
}
if (4 == i) //判断与chess[4][e]在同一斜列
{
if((j-4) == abs(k-e))
{
return false;
}
}
if (5 == i) //判断与chess[5][f]在同一斜列
{
if((j-5) == abs(k-f))
{
return false;
}
}
if (6 == i) //判断与chess[5][f]在同一斜列
{
if((j-6) == abs(k-g))
{
return false;
}
}
}
return true;
}
void func()
{
for (a = 0; a < 8; a++) //第一行 第a列
{
chess[0][a] = 1;
for (b = 0; b < 8; b++) //第二行
{
if (isvalid(1, b))
{
chess[1][b] = 1;
for (c = 0; c < 8; c++) //第三行
{
if (isvalid(2, c))
{
chess[2][c] = 1;
for(d = 0;d < 8; d++) //第四行
{
if (isvalid(3, d))
{
chess[3][d] = 1;
for(e = 0; e < 8; e++) //第五行
{
if(isvalid(4, e))
{
chess[4][e] = 1;
for (f = 0; f < 8; f++) //第六行
{
if(isvalid(5, f))
{
chess[5][f] = 1;
for(g = 0; g < 8; g++) //第七行
{
if(isvalid(6, g))
{
chess[6][g] = 1;
for(h = 0; h < 8;h++)
{
if(isvalid(7,h))
{
chess[7][h] = 1;
for(int i = 0; i < 8; i++)
{
printf("%d,%d,%d,%d,%d,%d,%d,%d\n",chess[i][0],chess[i][1],chess[i][2],chess[i][3],chess[i][4],chess[i][5],chess[i][6],chess[i][7]);
}
printf("*******************************\n");
count++;
chess[7][h] = 0;
}
}
chess[6][g] = 0;
}
}
chess[5][f] = 0;
}
}
chess[4][e] = 0;
}
}
chess[3][d] = 0;
}
}
chess[2][c] = 0;
}
}
chess[1][b] = 0;
}
}
chess[0][a] = 0;
}
}
int main()
{
count = 0;
func();
printf("%d",count);
return 0;
}
以上是我第一次写的代码,可以运行,但是写的不好,没有使用递归