poj 1184
经典的宽搜题目,感觉最好的办法应该是双向广搜。
不过用简单的启发式搜索可以飘过。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
int a,b;
char ans[1111111][7];
int inf[7]={1,1,10,100,1000,10000,100000};
struct D
{
int key;
char x,sum,now;
bool operator <(const struct D & xx) const
{
if(sum==xx.sum)
return now<xx.now;
return sum>xx.sum;
}
};
priority_queue <D> q; int cal(int key,int x,int b)
{
int from[7],to[7];
for(int i=1;i<=6;i++)
{
from[i]=key%10;
key/=10;
to[i]=b%10;
b/=10;
}
int ret=0;
for(int i=1;i<=6;i++)
if(i!=x)
{
ret+=from[i]!=to[i];
}
sort(from+1,from+1+6);
sort(to+1,to+1+6);
for(int i=1;i<=6;i++)
{
if(from[i]-to[i]>0)
ret+=from[i]-to[i];
else
ret+=to[i]-from[i];
}
return ret;
} int bfs(int a,int b)
{
memset(ans,100,sizeof(ans));
ans[a][1]=0;
struct D xx;
xx.key=a;
xx.sum=0+cal(a,1,b);
xx.x=1;
xx.now=0;
q.push(xx);
while(1)
{
int key=q.top().key;
int x=q.top().x;
int tmp=ans[key][x];
q.pop();
if(key==b)
return tmp;
if(x<6&&tmp+1<ans[key][x+1])
{
xx.now=ans[key][x+1]=tmp+1;
xx.key=key;
xx.x=x+1;
xx.sum=tmp+cal(key,x+1,b);
q.push(xx);
}
int txt=inf[6-x+1];
int keyx=key/txt%10;
if(keyx>0&&tmp+1<ans[key-1*txt][x])
{
xx.now=ans[key-1*txt][x]=tmp+1;
xx.key=key-1*txt;
xx.x=x;
xx.sum=tmp+cal(key-1*txt,x,b);
q.push(xx);
}
if(keyx<9&&tmp+1<ans[key+1*txt][x])
{
xx.now=ans[key+1*txt][x]=tmp+1;
xx.key=key+1*txt;
xx.x=x;
xx.sum=tmp+cal(key+1*txt,x,b);
q.push(xx);
}
int tt=key/inf[6];
int to=key%inf[6]+keyx*inf[6]-keyx*txt+tt*txt;
if(tmp+1<ans[to][x])
{
xx.now=ans[to][x]=tmp+1;
xx.key=to;
xx.x=x;
xx.sum=tmp+cal(to,x,b);
q.push(xx);
}
tt=key%10;
to=key/10*10+keyx-keyx*txt+tt*txt;
if(tmp+1<ans[to][x])
{
xx.now=ans[to][x]=tmp+1;
xx.key=to;
xx.x=x;
xx.sum=tmp+cal(to,x,b);
q.push(xx);
}
}
} int main()
{
// freopen("in.txt","r",stdin);
scanf("%d %d",&a,&b);
int ans=bfs(a,b);
cout<<ans<<endl;
return 0;
}
poj 1184的更多相关文章
- (广搜)聪明的打字员 -- POJ --1184
链接: http://poj.org/problem?id=1184 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...
- poj 1184 广搜进阶题
起初的想法果然就是一个6000000的状态的表示. 但是后面觉得还是太过于幼稚了. 可以看看网上的解释,其实就是先转换位置,然后再改变数字的大小. #include<iostream> # ...
- POJ 1184 聪明的打字员
简直难到没朋友. 双向bfs + 剪枝. 剪枝策略: 对于2--5位置上的数,仅仅有当光标在相应位置时通过swap ,up.down来改变.那么当当前位置没有达到目标状态时,left和right无意义 ...
- poj很好很有层次感(转)
OJ上的一些水题(可用来练手和增加自信) (POJ 3299,POJ 2159,POJ 2739,POJ 1083,POJ 2262,POJ 1503,POJ 3006,POJ 2255,POJ 30 ...
- POJ题目分类推荐 (很好很有层次感)
著名题单,最初来源不详.直接来源:http://blog.csdn.net/a1dark/article/details/11714009 OJ上的一些水题(可用来练手和增加自信) (POJ 3299 ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
- POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)
本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
随机推荐
- Android service与Thread
很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下. 1). Thread:Thre ...
- 使用Let's Encrypted HPPTS你的网站
1.前言 最近,有同事咨询我,怎么样使用Let's Encrypted部署数字证书,于是,结合自己之前的实践,简单总结下. 2.HTTPS的优势 什么加密,防篡改,防广告植入什么的,这个就不多说了.这 ...
- Unicode范围预览
链接: https://www.zhangxinxu.com/study/201611/show-character-by-charcode.php?range=4E00-9FBB 备注: Unico ...
- STM32应用实例五:与SHT1X温湿度传感器通讯
在这次项目开发中应用到了SHT1X温湿度传感器,该系列有SHT10.SHT11和SHT15,属于Sersirion温湿度传感器家族中的贴片封装系列.包括一个电容性聚合体测湿敏感元件.一个用能隙材料制成 ...
- vue-router之路由钩子(组件内路由钩子必须在路由组件调用,子组件没用)
模式 vue-router中的模式选项主要在router实例化的时候进行定义的,如下 const router = new VueRouter({ mode: 'history', // 两种类型hi ...
- jquery----语法扩展(导入js文件)
简单使用 第一步,新建js文件 第二步,在js文件中添加 $.extend({ "GDP": function () { console.log("哈哈哈哈") ...
- DB操作-用批处理执行Sql语句
用批处理在命令行状态下调用查询分析器来执行这个sql文件里的语句.下面就是sqlserver帮助里对于查询分析器(isqlw)命令行参数的解释:isqlw 实用工具(SQL 查询分析器)使您得以输入 ...
- PTA之求单链表结点的阶乘和
本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 时间限制: 400ms 内存限制: 64MB 代码长度限制: 16KB 函数接口定义: int ...
- 使用gunicorn将django项目部署到生产环境的子目录下,在nginx后端获取客户真实IP地址
生产环境有时,并不是为了一个项目而存在的.毕竟,域名是比较稀有的. 今天遇到这个问题,解决了.作个记录. 并且,如果将django项目部署在Nginx后面,那如何获取用户真实的IP地址呢? 下面就来解 ...
- Hibernate的核心对象关系映射
Hibernate的核心就是对象关系映射: 加载映射文件的两种方式: 第一种:<mapping resource="com/bie/lesson02/crud/po/employee. ...