hacqing

春风扫落叶...

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

    九皇后问题? 没搞错吧. 记得是8皇后问题呀...嘿嘿, 没错. 请看代码. (搞了几十分钟, 才弄出来, 几年前, 兰兰姐教得不错. 忘光了)

 

#include <iostream>

int counts = 0;

void print(int **array, int row, int line)
{
    if (array == 0)
    {
        return ;
    }

    std::cout<< "-------------------" << std::endl;
    for (int i=0; i<row; ++i)
    {
        for (int j=0; j<line; ++j)
        {
            std::cout<< array[i][j] << " ";
        }
        std::cout<< std::endl;
    }
    std::cout<< "-------------------" << std::endl << std::endl;
    return ;
}

bool try_position(int **array, int row, int line, int x, int y)
{
    for (int i=0; i<y; ++i)
    {
        if (array[i][x] == 1)
        {
            return false;
        }
    }

    for (int i=x-1, j=y-1; i>-1 && j>-1; i--, j--)
    {
        if (array[j][i] == 1)
        {
            return false;
        }
    }

    for (int i=x+1, j=y-1; i<line && j>-1; i++, j--)
    {
        if (array[j][i] == 1)
        {
            return false;
        }
    }
    return true;
}

void nine_queen(int **array, int row, int line, int n)
{
    if (n == row)
    {
        counts ++;
//        print(array, row, line);
        return ;
    }

    for (int i=0; i<line; ++i)
    {
        if (try_position(array, row, line, i, n))
        {
            array[n][i] = 1;
            nine_queen(array, row, line, n+1);
            array[n][i] = 0;
        }
    }
    return ;
}

int main(int argc, char* argv[])
{
    int n = 9;
    int **array = new int*[n];
    for (int i=0; i<n; i++)
    {
        array[i] = new int[n];
        memset(array[i], 0, sizeof(int) * n);
    }

    nine_queen(array, n, n, 0);
    std::cout<< counts << std::endl;    
  
//差点忘delete[]了. 很久没写代码了呀.
for(int i=0; i<n; i++)
{
        delete[] array[i];
    }
delete[] array;
return 0; }

 

posted on 2012-05-14 17:37  hacqing  阅读(710)  评论(0)    收藏  举报