热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搜索:启发式搜索

启发式搜索只能深搜一般也是用来解决最优解问题的在一个55的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位。在任何时候一个骑士都能按照骑士的走法(

启发式搜索只能深搜

一般也是用来解决最优解问题的

在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。

在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空位上。

给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘: 为了体现出骑士精神,他们必须以最少的步数完成任务。

引入了启发函数之后,可以很好地改善效率,但是只能深搜

1 #include
2 #include
3 #include
4 using namespace std;
5 int T,k;
6 int ans[5][5]={{1,1,1,1,1},
7 {0,1,1,1,1},
8 {0,0,2,1,1},
9 {0,0,0,0,1},
10 {0,0,0,0,0}};
11 int xx[8]={1,1,-1,-1,2,2,-2,-2};
12 int yy[8]={2,-2,2,-2,1,-1,1,-1};
13 int flag=0;
14 int judge(int a[5][5])
15 {
16 for(int i&#61;0;i<5;i&#43;&#43;)
17 for(int j&#61;0;j<5;j&#43;&#43;)
18 if(ans[i][j]!&#61;a[i][j])return 0;
19 return 1;
20 }
21 int eva(int a[5][5],int s)
22 {
23 int v&#61;0;
24 for(int i&#61;0;i<5;i&#43;&#43;)
25 for(int j&#61;0;j<5;j&#43;&#43;)
26 if(a[i][j]!&#61;ans[i][j]){v&#43;&#43;;if(v&#43;s>k)return 0;}
27 return 1;
28 }
29 void search(int s,int a[5][5],int x,int y)
30 {
31 if(s&#61;&#61;k){if(judge(a))flag&#61;1;return;}
32 if(flag&#61;&#61;1)return;
33 for(int i&#61;0;i<8;i&#43;&#43;)
34 {
35 int nowx&#61;x&#43;xx[i],nowy&#61;y&#43;yy[i];
36 if(nowx<0||nowx>4||nowy<0||nowy>4)continue;
37 swap(a[x][y],a[nowx][nowy]);
38 if(eva(a,s))search(s&#43;1,a,nowx,nowy);
39 swap(a[x][y],a[nowx][nowy]);
40 }
41 }
42 int main()
43 {
44 scanf("%d",&T);
45 while(T--)
46 {
47 int a[5][5];int x,y;
48 memset(a,0,sizeof(a));
49 for(int i&#61;0;i<5;i&#43;&#43;)
50 {
51 char ch[10];scanf("%s",ch);
52 for(int j&#61;0;j<5;j&#43;&#43;)
53 {
54 if(ch[j]&#61;&#61;&#39;*&#39;){a[i][j]&#61;2;x&#61;i;y&#61;j;}
55 else a[i][j]&#61;ch[j]-&#39;0&#39;;
56 }
57 }
58 for(k&#61;1;k<&#61;15;k&#43;&#43;)
59 {search(0,a,x,y);if(flag){printf("%d\n",k);break;}}
60 if(!flag)printf("-1\n");
61 else flag&#61;0;
62 }
63 return 0;
64 }

 

转:https://www.cnblogs.com/aininot260/p/9627460.html



推荐阅读
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 本文深入探讨了二叉搜索树(Binary Search Tree, BST)及其操作,包括查找、插入和删除节点。同时,文章还介绍了平衡二叉树(AVL树)的概念及调整方法,并详细讨论了如何判断两个序列是否构成相同的二叉搜索树。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
author-avatar
为你空手的执着
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有