遡及法-八皇后問題のC実現


/*
     :
 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;
}