第一个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*启发搜索)的更多相关文章

  1. 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)

    第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...

  2. UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)

    非常适合A*的一道题. 比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量. #include<cstdio> #include<cstring> #include< ...

  3. 启发式搜索A-Star算法 【寻找 最短路径 算法】【地理几何位置 可利用的情况】

    在处理最短路径问题时,有一种启发式算法是我们应该了解的,由于其有着优秀的探索效率在各自现实项目中多有应用,它就是 A-star 算法,或  A*  算法. 个人观点: A*  算法并不保证找到的路径一 ...

  4. BZOJ-1085 骑士精神

    估价函数其实就是与目标状态有几个不同... 迭代启发搜索. #include <cstdlib> #include <cstdio> #include <cstring& ...

  5. poj2243+poj1915骑士问题

    2243是骑士问题,八个格子的,BFS,因为要最短路经,所以没有用A*,A*跑不出来,太慢了,因为要搜索到所有解啊!一直更新最优,而BFS,一层一层搜索,第一次得到的便是最短的了!300格子,标记的话 ...

  6. 浅谈DFS,BFS,IDFS,A*等算法

    搜索是编程的基础,是必须掌握的技能.--王主任 搜索分为盲目搜索和启发搜索 下面列举OI常用的盲目搜索: 1.dijkstra 2.SPFA 3.bfs 4.dfs 5.双向bfs 6.迭代加深搜索( ...

  7. UVA-439, Knight Moves(深度优先搜索)

    #include<iostream> #include<queue> #include<cstring> #include<string> #inclu ...

  8. Beam Search(集束搜索/束搜索)

    找遍百度也没有找到关于Beam Search的详细解释,只有一些比较泛泛的讲解,于是有了这篇博文. 首先给出wiki地址:http://en.wikipedia.org/wiki/Beam_searc ...

  9. 【五子棋AI循序渐进】——多线程搜索

    关于多线程搜索,有很多方法来实现,很多文章推荐基于MTD(F)的方式.好处不言而喻,不过我的程序中采用的是基于PVS的多线程搜索.实现起来主要是这几个方面问题需要解决: 1.置换表的互斥访问. 2.局 ...

随机推荐

  1. 模块 DLL C:\WINDOWS\system32\inetsrv\aspnetcore.dll 未能加载。返回的数据为错误信息。

    更新了win10的版本后,就启动原来的iis发布的程序 程序池就自动关闭.后来 启动网站 iis程序池自动关闭. 在为应用程序池“.NET v4.5”提供服务的工作进程“21908”中,协议“http ...

  2. HDU - 4821 String(窗口移动+map去重+hash优化)

    String Given a string S and two integers L and M, we consider a substring of S as “recoverable” if a ...

  3. C#——委托(1)

    什么是委托?还记得C/C++语言里的函数指针吗?委托就是他的”升级版“.先看一个简单的小程序: # include<stdio.h> typedef int(*Calc)(int a, i ...

  4. Git提交与恢复

    Git提交与恢复 提交修改 git add --all # 提交所有修改文件 git add file file # 提交部分修改文件 $ git status On branch master Yo ...

  5. 938. Range Sum of BST

    Given the root node of a binary search tree, return the sum of values of all nodes with value betwee ...

  6. PHP SOAP 提交XML

    <?php $xmldata = <<<EOT <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap. ...

  7. (三)siege的使用

    学习: ELK——http://dockone.io/article/3655 docker——http://www.testclass.net/docker/ Android Monkey压力测试— ...

  8. php高并发之opcache

    今天工作的时候接触到客户的一台服务器,业务逻辑比较简单 .估算pv在120w左右吧,用的是阿里云2c4g的服务器.一大早就开始卡顿了,登陆服务器后查看负载到了八九十. 之后就想办法调整一下吧.突然想起 ...

  9. ldap 报错整理

    1.httpd 无法启动 先用systemctl status httpd 查看一下日志 1.提示端口号是否冲突,修改httpd.conf端口号 2.提示没有权限:检查selinux,防火墙是否关闭或 ...

  10. vue之webpack打包工具的使用

    vue之webpack打包工具的使用 一.什么是webpack? webpack是一个模块打包工具.用vue项目来举例:浏览器它是只认识js,不认识vue的.而我们写的代码后缀大多是.vue的,在每个 ...