_在路上

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

该题目摘自《C专家编程》附录A.4 编程挑战。

 

#include <stdio.h>

//检查该点有效返回1,否则返回0
int CheckPosition (int (*chess)[8], int row, int col)
{
    int IsTrue = 1;
    int i, j;

    //左上方,行数减,列数减
    for (i = row, j = col; IsTrue && i >= 0 && j >= 0; i--, j--)
    {
        if (chess[i][j] == 1) 
            IsTrue = 0;
    }
    //上方,列数不变
    for (i = row, j = col; IsTrue && i >= 0; i--)
    {
        if (chess[i][j] == 1)
            IsTrue = 0;
    }
    //右上方,行数减,列数加
    for (i = row, j = col; IsTrue && i >= 0 && j < 8; i--, j++)
    {
        if (chess[i][j] == 1)
            IsTrue = 0;
    }

    return IsTrue;
}

void DisChess (int (*chess)[8])
{
    int     i, j;
    static  n = 0;

    printf("第%d种解法\r\n", ++n);
    for (i = 0; i < 8; i++)
    {
        for (j = 0; j < 8; j++)
        {
            printf("%4d", chess[i][j]);
        }
        puts("\r\n");
    }
    puts("\r\n");
}

void EightQueen (int (*chess)[8], int row)
{
    int col;

    if (row < 8)
    {
        for (col = 0; col < 8; col++)
        {
            if ((chess[row][col] = CheckPosition(chess, row, col))
                == 1)
            {
                EightQueen(chess, row + 1);
                chess[row][col] = 0;
            }
        }
    }
    else
    {
        //显示
        DisChess(chess);
    }
}

int main()
{   
    int chess[8][8] = {0};

    EightQueen(chess, 0);

    return 0;
}   
posted on 2012-10-04 21:04  _在路上  阅读(188)  评论(0编辑  收藏  举报