UVA439 knightMoves (A*启发搜索)
第一个A*,纪念下。
A*要保证最短路一定要估价函数小于等于实际值,越接近越好
估价函数取Manhattan距离除以二。
//Rey
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = ;
bool C[N][N];
struct node
{
int g,h;
int x, y;
bool operator < (const node& rhs) const{
if(g + h > rhs.g + rhs.h) return true;
if(g + h < rhs.h + rhs.g ) return false;
return g > rhs.g;
}
}; int tax,tay; inline void getH(node& o)
{
o.h = (abs(o.x-tax)+abs(o.y-tay))>>;
} #define joinC(n) C[n.x][n.y] = true
int dx[] = {,, , ,-,-,-,-};
int dy[] = {,,-,-,-,-, , }; int bfs(node &start)
{
priority_queue<node> Q;
memset(C,false,sizeof(C));
Q.push(start);
joinC(start);
node cur,nxt;
int i,nx,ny;
while(Q.size()){
cur = Q.top();Q.pop();
if(cur.x == tax && cur.y == tay) return cur.g;
for(i = ; i < N; i++){
nx = cur.x + dx[i];
ny = cur.y + dy[i];
if(nx >= N || nx < || ny >= N || ny < || C[nx][ny]) continue;
nxt.x = nx ; nxt.y = ny; nxt.g = cur.g+ ; getH(nxt);
joinC(nxt);
Q.push(nxt);
}
}
return -;
} int main()
{
node start;
char fro[],to[];
char ch;
int n;
while(~scanf("%s",fro)){
scanf("%s",to);
sscanf(fro,"%c",&ch);
sscanf(fro+,"%1d",&n);
start.x = ch -'a';
start.y = n-;
start.g = ;
sscanf(to,"%c",&ch);
sscanf(to+,"%1d",&n);
tax = ch - 'a';
tay = n-;
getH(start);
printf("To get from %s to %s takes %d knight moves.\n",fro,to,bfs(start));
}
return ;
}
UVA439 knightMoves (A*启发搜索)的更多相关文章
- 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)
第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...
- UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)
非常适合A*的一道题. 比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量. #include<cstdio> #include<cstring> #include< ...
- 启发式搜索A-Star算法 【寻找 最短路径 算法】【地理几何位置 可利用的情况】
在处理最短路径问题时,有一种启发式算法是我们应该了解的,由于其有着优秀的探索效率在各自现实项目中多有应用,它就是 A-star 算法,或 A* 算法. 个人观点: A* 算法并不保证找到的路径一 ...
- BZOJ-1085 骑士精神
估价函数其实就是与目标状态有几个不同... 迭代启发搜索. #include <cstdlib> #include <cstdio> #include <cstring& ...
- poj2243+poj1915骑士问题
2243是骑士问题,八个格子的,BFS,因为要最短路经,所以没有用A*,A*跑不出来,太慢了,因为要搜索到所有解啊!一直更新最优,而BFS,一层一层搜索,第一次得到的便是最短的了!300格子,标记的话 ...
- 浅谈DFS,BFS,IDFS,A*等算法
搜索是编程的基础,是必须掌握的技能.--王主任 搜索分为盲目搜索和启发搜索 下面列举OI常用的盲目搜索: 1.dijkstra 2.SPFA 3.bfs 4.dfs 5.双向bfs 6.迭代加深搜索( ...
- UVA-439, Knight Moves(深度优先搜索)
#include<iostream> #include<queue> #include<cstring> #include<string> #inclu ...
- Beam Search(集束搜索/束搜索)
找遍百度也没有找到关于Beam Search的详细解释,只有一些比较泛泛的讲解,于是有了这篇博文. 首先给出wiki地址:http://en.wikipedia.org/wiki/Beam_searc ...
- 【五子棋AI循序渐进】——多线程搜索
关于多线程搜索,有很多方法来实现,很多文章推荐基于MTD(F)的方式.好处不言而喻,不过我的程序中采用的是基于PVS的多线程搜索.实现起来主要是这几个方面问题需要解决: 1.置换表的互斥访问. 2.局 ...
随机推荐
- strlen细节以及sizeof细节
strlen细节以及sizeof细节前者会忽略结束符号,后者不会忽略结束符
- JAVA企业级开发-jdbc事务,数据库连接池(10)
一. JDBC事务 事务: 问题1.什么是事务 问题2.java中(jdbc)如何控制事务 1. 事务—重点 指的的逻辑上的一组(一组sql,insert update ,delete)操作,组成 ...
- .net 扩展方法,lamada表达式 委托
扩展方法 (1)扩展方法是一种特殊的静态方法,它定义在一个静态类中,但可以在其他类的对象上向调用实例方法那样进行调用.因此,通过扩展方法,我们就可以在不修改一个类型的前提下对一个类型进行功能上的扩充, ...
- 编写BeanFactory
/** * 一个创建Bean对象的工厂 * * Bean:在计算机英语中,有可重用组件的含义. * JavaBean:用java语言编写的可重用组件. * javabean > 实体类 * * ...
- TemplateText TT 在Runtime发生 Could not load type ...... because the format is invalid
Severity Code Description Project File Line Suppression State Error Running transformation: System.T ...
- uoj#388. 【UNR #3】配对树(线段树合并)
传送门 先考虑一个贪心,对于一条边来说,如果当前这个序列中在它的子树中的元素个数为奇数个,那么这条边就会被一组匹配经过,否则就不会 考虑反证法,如果在这条边两边的元素个数都是偶数,那么至少有两组匹配经 ...
- Jmeter集成Jira提交缺陷
笔者曾在文章<Jmeter排忧解难—生成excel结果文件>聊到了一种提高接口测试效率的方法.今天,咱们接着对“提高接口测试效率”这个话题做更深入的探讨.作为一名接口测试人员,我们是否一直 ...
- thinkphp 2.1代码执行及路由分析
Dispatcher.class.php这个文件中是url路由,由于第一次正式看路由那块,所以就从头开始一行一行看把. 首先是dispatch函数 是37行到140行 这个函数是做映射用,把url映射 ...
- [软件工程基础]Alpha 软件测试报告
PhyLab Alpha 测试报告 测试中发现的bug Alpha版本限制与问题 由于接手时数据库已经丢失,这一版本主要修复了大部分数据库,使得网站得以运行. 相比接手时网站的状况,有以下改进: 恢复 ...
- 批量插入,update
#####setting 1create table t as select * from all_objects where 1 =2; ###.模拟逐行提交的情况,注意观察执行时间DECLAREB ...