遡及法-八皇后問題のC実現
1571 ワード
/*
:
8X8 , ,
、 (45 ) ,
。
*/
/*
:
, 。 。
, , ( )。
。
i , i-1 。
i-1 。( )
, , 1。
, , , 1;
, , , 。( )。
*/
/*
, c++ , , 。
C , C++ 。
, , ! 、 、 、 ! !
*/
#include "stdafx.h"
#include
#include
#include
using namespace std;
#define MAX 8
int queen[MAX]; // , , ( )。
int sum = 0;
int IsCorPos(int CurRowNum) //
{
if(0 == CurRowNum)
return 1;
for(int RowNum = 0; RowNum < CurRowNum; RowNum++)
{
if(abs(CurRowNum - RowNum) == abs(queen[CurRowNum] - queen[RowNum]) || queen[CurRowNum] == queen[RowNum])
return 0;
}
return 1;
}
void Print() //
{
for(int i = 0; i < MAX; i++)
cout << i << ' ' << queen[i] << ',';
cout << endl;
sum++;
}
void Put(int RowNum) // , 。 。
{
for(int Col = 0; Col < MAX; Col++)
{
queen[RowNum] = Col;
if(IsCorPos(RowNum))
{
if(RowNum == MAX - 1)
Print();
else
{
Put(1+RowNum);
}
}
}
}
//
int main()
{
Put(0);
cout << endl << sum << endl;
return 0;
}