资源简介
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
void constructiveMethod( int n );
bool conflicting(const int q[]int n int i);
void constructNext(int q[] int n int i);
void repairApproach( int n );
bool repair( int q[] int n int& maxConf );
int getConfNum(const int q[] int n int i );
void print(const int q[] int n);
int main()
{
srand(time(0));
int N = 4;
const int REP_NUM = 10;
long start stop;
cout< cout< while (N<=32)
{
cout<<“N = “< start = clock();
// time(&start);
for ( int i=0; i {
constructiveMethod(N);
}
//time(&stop);
stop = clock();
cout< <<(double)(stop-start)/REP_NUM<<“MS“;
start = clock();
// time(&start);
for ( int i=0; i {
repairApproach(N);
}
//time(&stop);
stop = clock();
cout< <<(double)(stop-start)/REP_NUM<<“MS“;
N++;
cout< }
return 0;
}
//constructive method to solve n queens puzzle
bool g_found;
void constructiveMethod( int n )
{
g_found = false;
int* q = new int[n];
constructNext(qn0);
delete []q;
}
//construct ith queen‘s position
void constructNext( int q[] int n int i )
{
if ( g_found )
return;
if ( i == n )
{
// print(qn);
g_found = true;
return;
}
for ( int j=0; j {
q[i] = j;
if ( !conflicting(qni) )
{
constructNext(qni+1);
}
}
}
//test if q[i] conflicts with q[0..i-1]
bool conflicting( const int q[]int n int i )
{
for ( int k=0; k {
if ( q[k]==q[i] )
return true;
if ( q[k]-q[i] == k-i )
return true;
if ( q[k]-q[i] == i-k )
return true;
}
return false;
}
void repairApproach( int n )
{
int* q = new int[n];
int maxConf = n;
while ( maxConf!=0 )
{
for ( int i=0; i {
q[i] = rand()%n;
}
bool repaired = true;
while ( repaired )
{
repaired = repair(qnmaxConf);
}
}
// print(qn);
delete []q;
}
bool repair( int q[] int n int& maxConf )
{
maxConf = -1;
bool repaired = false;
for ( int i=0; i {
int orgVal = q[i];
int minVal = q[i];
int minConf = n;
for ( int j=0; j {
q[i] = j;
int confNum = getConfNum(qni);
if ( confNum < minConf )
{
minConf = confNum;
minVal = j;
}
}
q[i] = minVal;
if ( orgVal != minVal )
{
repaired = true;
}
if ( minConf > maxConf )
maxConf = minConf;
}
return repaired;
}
//get number of columns that conflct with column i
int getConfNum( const int q[] int n int i )
{
int num = 0;
for ( int j=0; j {
if ( j==i )
continue;
if ( q[j]==q[i] )
num++;
else if ( q[j]-q[i] == j-i )
num++;
else if ( q[j]-q[i] == i-j )
num++;
}
re
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2009-03-06 18:53 nQueens\
文件 3131 2008-05-15 19:58 nQueens\nQueens.cpp
文件 1626435 2009-03-06 18:19 nQueens\N皇后问题.pdf
相关资源
- 个人日常财务管理系统(C语言)
- 6自由度机器人运动学正反解C++程序
- 最新的魔兽世界机器人脚本NpcBot.pat
- 人脸识别(opencv_facedetect_v4l2)
- 无人机视频代码
- STM32红外检测有人开始录音,并播放录
- 智能灯(无极调光-配合人体检测)
- 人工蜂群算法.docx
- 公司人员月薪级别信息管理系统.cpp
- 吃豆人.cpp 代码
- 无人机飞控+ps2遥控代码
- 基于LPC2132的蛇形机器人前端执行机构
- 手性摄动理论中双迷人重子的辐射衰
- 基于机器视觉可移动裂纹检测机器人
- 五子棋C++(Qt版).zip
- 数码人像采集系统
- 基于Cocos2dx的炸弹人游戏
- vc.6.0 MFC 人事管理系统源码
- 企业人事管理系统c++实现
- 基于遗传算法的机器人路径规划
- 数据结构课后习题答案(C++语言版)
- 人员管理系统 c语言源码 课程设计专
- 移动机器人lissajous曲线轨迹跟踪
- C和C++程序员面试秘笈-董山海_高清版
- VisualC++网络高级编程.(人民邮电.陈坚
- 泡泡堂(炸弹人)小游戏C/C++完整源码
- 数据结构 C语言版 第2版 严蔚敏 李冬
- MFC多人聊天室
- 个人总结的一些C/C++编码规范
- BP算法的C++实现
评论
共有 条评论