人工智能-八皇后爬山法(最陡上升,首项选择),随即重新启动法

本文介绍了八皇后问题的解决方案,包括最陡上升法、首项选择法和随机重新启动法。最陡上升法通过选择冲突最多的行并移动至冲突最少的位置来迭代,但可能陷入局部最优。首项选择法则采用随机行选择,避免了最陡上升法的局限。随机重新启动法在超过特定步数后重新生成状态,确保100%找到正确解。针对最陡上升和随机重新启动法的优化策略是当h值相同时进行随机选择,显著提高了效率。
摘要由CSDN通过智能技术生成
#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 =&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值