游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3250|回复: 5

有谁理解八皇后算法

[复制链接]

13

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2010-3-10 15:36:00 | 显示全部楼层 |阅读模式
八皇后算法一直搞不懂,谁有好理解的八皇后算法的代码没

1

主题

28

帖子

30

积分

注册会员

Rank: 2

积分
30
QQ
发表于 2010-3-12 21:18:00 | 显示全部楼层

Re:有谁理解八皇后算法

穷举

13

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2010-3-14 20:08:00 | 显示全部楼层

Re:有谁理解八皇后算法

能具体说下 实现代码吗

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2010-3-15 09:19:00 | 显示全部楼层

Re:有谁理解八皇后算法

网上多的是了,
算法这个东西,一般都可以搜索到.
除了某些专业的算法.

13

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2010-3-15 15:57:00 | 显示全部楼层

Re:有谁理解八皇后算法

有代码都看不明白,真郁闷!

2

主题

17

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2010-4-30 22:31:00 | 显示全部楼层

Re:有谁理解八皇后算法

N-皇后问题采用的是回溯法

这是以前写的代码,LZ可以看看,可能有点帮助
#include<iostream>
#include<string>
using namespace std;

class QueenChess
{
public:
        QueenChess( void);                                 //构造函数
        bool SafeJudge( int row, int col) const;           //判断位置(row,col)是否安全
        void PlaceQueen( int row);                         //在第row行放置一个皇后
        void DrawChess( void) const;                       //打印8个皇后放置成功的棋盘
        int sum;                                           //用于记录成功的总数目
private:
        string chessState[8];       
};

QueenChess:ueenChess( void)
{
        sum = 0;
        for( int i =0; i < 8; i++)
                        chessState = "        ";                //8个空格
}

bool QueenChess::SafeJudge( int row, int col) const
{
        int qRow,qCol;
        //检查前面各行,看与前面放置的皇后是否发生冲突
        for( qRow = 0; qRow < row; qRow++)
        {
                string rowState = chessState[qRow];
                //寻找第preRow行放置皇后的列数
                qCol = rowState.find("Q");
                //进行判断
                if( qRow == row || qCol == col || (qRow - qCol) == (row - col) || (qRow + qCol) == (row + col))
                        return false;
        }
        return true;
}

void QueenChess:laceQueen( int row)
{
        //穷尽第row行的所有列
        for( int col = 0; col < 8; col++)
        {
                if(SafeJudge( row, col))
                {
                        chessState[row][col] = 'Q';
                        if(row< 7)
                                PlaceQueen( row+1);
                        else
                        {
                                sum ++;
                                DrawChess();
                        }
                }
                chessState[row] = "        ";                //8个空格
        }
}

void QueenChess:rawChess( void) const
{
        int i, j;
        cout << "\n八皇后问题的第"<<sum<<"个解为:"<<endl;
        cout <<"   0 1 2 3 4 5 6 7 "<<endl;
        cout <<"   ________________"<<endl;
        for( i = 0; i < 8 ; i++)
        {
                cout <<i <<"| ";
                for( j = 0; j < 8; j++)
                        cout <<chessState[j]<<" ";
                cout <<" "<<endl;
        }
}

int main()
{
        QueenChess qc;
        qc.PlaceQueen( 0);
        cout <<"\n\n八皇后问题的成功求解个数为: "<<qc.sum<<endl;
        return 0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 20:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表