#include<iostream>
#include<string>
#include<time h="">
#include<iomanip>
using namespace std;
int qi[64];
int maze[64];
int check(int idx) {
int index = idx;
int row = index / 8;
int col = index % 8;
int j;
int h = 0;
int i;
for (i = col; i < 64; i += 8)
if (qi[i] == 1)
h++;
for (i = row, j = col; i >= 0 && j >= 0; i--, j--)
if (qi[i * 8 + j] == 1)
h++;
for (i = row, j = col; i < 8 && j < 8; i++, j++)
if (qi[i * 8 + j] == 1)
h++;
for (i = row, j = col; i >= 0 && j < 8; i--, j++)
if (qi[i * 8 + j] == 1)
h++;
for (i = row, j = col; j >= 0 && i < 8; i++, j--)
if (qi[i * 8 + j] == 1)
h++;
return h;
}
bool hill_climbing(int n) {
int i;
int max;
int ff;
int step = 0;
do {
for (int i = 0; i < 64; i++) {
qi[i] = maze[i];
}
int h[64];
for (int i = 0; i < 64; i++) {
int row = i / 8;
for (int j = 0; j < 8; j++) {
qi[row * 8 + j] = 0;
}
h[i] = check(i);
for (int j = 0; j < 8; j++) {
qi[row * 8 + j] = maze[row * 8 + j];
}
}
max = 0;
int pos;
for (i = 0; i < 64; i++) {
if (h[i] >= max && maze[i] == 1) {
max = h[i];
pos = i;
}
}
int row;
row = pos / 8;
int min = 999999;
int xiao, f = 0;
for (int i = 0; i < 8; i++) {
if (h[row * 8 + i] < min && min >= 1) {
min = h[row * 8 + i], xiao = row * 8 + i, f = 1;
}
else if (h[row * 8 + i] == min && min >= 1) {
int r = rand() % 2;
if (r == 1) {
min = h[row * 8 + i], xiao = row * 8 + i, f = 1;
}
}
}
if (f =&#
人工智能-八皇后爬山法(最陡上升,首项选择),随即重新启动法
本文介绍了八皇后问题的解决方案,包括最陡上升法、首项选择法和随机重新启动法。最陡上升法通过选择冲突最多的行并移动至冲突最少的位置来迭代,但可能陷入局部最优。首项选择法则采用随机行选择,避免了最陡上升法的局限。随机重新启动法在超过特定步数后重新生成状态,确保100%找到正确解。针对最陡上升和随机重新启动法的优化策略是当h值相同时进行随机选择,显著提高了效率。
摘要由CSDN通过智能技术生成