八皇后问题复习

八皇后问题是回溯算法的经典题目,今天把它记录下来,以后看起来方便。不理解的时候觉得很复杂,理解之后又觉得不复杂了。

C++11

#include 
#include 

using namespace std;

const int EIGHT = 8;
static int count = 0;

void Queen(int queen[], int rowLeft)
{
    if (0 == rowLeft)//放置完成,计数加1
    {
        count++;
    }
    else
    {
        for (int i=0; i

C++

#include "stdafx.h"
#include 
#include 

using namespace std;

const int EIGHT = 8;
int count = 0;
int Queens[EIGHT] = {0};
bool Check(int queen[], int curRow)
{
	for (int i=0; i

python:

EIGHT = 8
count = 0
Queens = [0,0,0,0,0,0,0,0]
def Check(queen, curRow):
    for i in range(curRow):
        if (queen[i] == queen[curRow]) or (curRow - i) == (queen[curRow] - queen[i]) or (queen[curRow] + curRow) == (queen[i] + i):
            return False
    return True

def Queen(queen, rowLeft):
    global count
    if 0 == rowLeft:
        count = count + 1
    else:
        for i in range(EIGHT):
            queen[EIGHT - rowLeft] = i
            if Check(queen, EIGHT - rowLeft) == True:
                Queen(queen, rowLeft-1)
    pass


def main():
    Queen(Queens, EIGHT)
    print('eight queen number: ' + str(count))


if __name__ == '__main__':
    main()

 

你可能感兴趣的:(算法)