题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043

思路:

由于自己对康拓展开用的太少,看到这个题没想到康拓展开,最开始打算直接转换为数字,但太占内存了,又想到可以将状态存进set,后来查了一下发现原来是考察康拓展开。另外就是需要打表预处理,这样快很多。BFS部分就是已知终点,从终点逆向搜索,并存每个状态的上一个状态以及操作,以便输出。

坑点:输入是多组输入,POJ那道题才是一组输入,卡在这一上午T_T。

   有一组输入为12345678x,需要特殊处理,不能不输出,可以输出“lr”。

 #include<bits/stdc++.h>
using namespace std; const int maxn=1e6+;
struct node{
char a[];
int x,y;
int cnt;
}tmp; int fac[];
int vis[maxn];
char path[maxn];
int pre[maxn];
int go[][]={-,,,,,,,-}; void init(){
fac[]=fac[]=;
for(int i=;i<;i++) fac[i]=fac[i-]*i;
} int cantour(char *s){
int ans=,k;
for(int i=;i<;i++){
k=;
for(int j=i+;j<;j++)
if(s[j]<s[i]) k++;
ans+=k*fac[-i];
}
return ans;
} void bfs(){
queue<node> q;
for(int i=;i<;i++)
tmp.a[i]=i++'';
tmp.a[]='';
tmp.x=,tmp.y=,tmp.cnt=cantour(tmp.a);
vis[tmp.cnt]=;
q.push(tmp);
path[tmp.cnt]=-;
while(!q.empty()){
node now=q.front();q.pop();
int nx=now.x,ny=now.y,ncnt=now.cnt;
for(int i=;i<;i++){
int xx=nx+go[i][],yy=ny+go[i][];
if(xx<||xx>||yy<||yy>) continue;
strcpy(tmp.a,now.a);
swap(tmp.a[nx*+ny],tmp.a[xx*+yy]);
tmp.x=xx,tmp.y=yy,tmp.cnt=cantour(tmp.a);
if(!vis[tmp.cnt]){
vis[tmp.cnt]=;
pre[tmp.cnt]=ncnt;
if(i==) path[tmp.cnt]='d';
else if(i==) path[tmp.cnt]='l';
else if(i==) path[tmp.cnt]='u';
else path[tmp.cnt]='r';
q.push(tmp);
}
}
}
} void print(int f){
while(path[f]!=-){
printf("%c",path[f]);
f=pre[f];
}
printf("\n");
} int main(){
char c[],ch;
int f;
init();
bfs();
while(scanf(" %c",&ch)!=EOF){
if(ch=='x') c[]='';
else c[]=ch;
for(int i=;i<;i++){
scanf(" %c",&ch);
if(ch=='x') c[i]='';
else c[i]=ch;
}
f=cantour(c);
if(path[f]==-) printf("lr\n");
else if(!vis[f]) printf("unsolvable\n");
else print(f);
}
return ;
}

hdoj1043 Eight(逆向BFS+打表+康拓展开)的更多相关文章

  1. HDU1043 Eight(八数码:逆向BFS打表+康托展开)题解

    Eight Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  2. HDU 1043 Eight(反向BFS+打表+康托展开)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 题目大意:传统八数码问题 解题思路:就是从“12345678x”这个终点状态开始反向BFS,将各 ...

  3. hdu1043 经典的八数码问题 逆向bfs打表 + 逆序数

    题意: 题意就是八数码,给了一个3 * 3 的矩阵,上面有八个数字,有一个位置是空的,每次空的位置可以和他相邻的数字换位置,给你一些起始状态 ,给了一个最终状态,让你输出怎么变换才能达到目的. 思路: ...

  4. poj 1077-Eight(八数码+逆向bfs打表)

    The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've see ...

  5. hdu 1043 Eight (八数码问题)【BFS】+【康拓展开】

    <题目链接> 题目大意:给出一个3×3的矩阵(包含1-8数字和一个字母x),经过一些移动格子上的数后得到连续的1-8,最后一格是x,要求最小移动步数. 解题分析:本题用BFS来寻找路径,为 ...

  6. hdu-1043(八数码+bfs打表+康托展开)

    参考文章:https://www.cnblogs.com/Inkblots/p/4846948.html 康托展开:https://blog.csdn.net/wbin233/article/deta ...

  7. HDU1430 BFS + 打表 + 康托展开

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1430 , 一道比较好的题. 这道题要用到很多知识,康托展开.BFS.打表的预处理还要用到一一映射,做完 ...

  8. 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开

    [kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...

  9. 【HDOJ1043】【康拓展开+BFS】

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 Eight Time Limit: 10000/5000 MS (Java/Others)    Memo ...

随机推荐

  1. maven学习(5)-Maven 聚合与继承特性

    接着上面的项目, 继承和聚合为了统一管理: 聚合: 有些项目中有很多小模块,可以合并到一起,将多个子项目可以统一管理,可以对user-dao,user-service进行统一管理(maven clea ...

  2. 杂项-Java:jar 包与 war 包介绍与区别

    ylbtech-杂项-Java:jar 包与 war 包介绍与区别 1.返回顶部 1. 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下: 1.jar包的介 ...

  3. [html] 回到页首

    [转]本文来自:最简单最强大的插件框架(Net 2.0+) http://www.cnblogs.com/baihmpgy/p/3305215.html <!doctype html> & ...

  4. java-appium-527进阶-1 UiAutomator1&2区别和封装

    1.UiAutomator和UiAtumator2的区别: 1.1 UiAutomator1有关于id定位的策略 UiAutomator1 id定位在resourceid匹配失败时,会匹配conten ...

  5. ZeroClipboard插件,复制到剪切板

    发现一个复制到剪切板的插件:ZeroClipboard插件.挺好用,用法如下: 头部引用: <script type="text/javascript" src=" ...

  6. 17monipdb.dat

    17monipdb是一款全球ipv4地址归属地数据库.专注于与地理位置定位相关的数据的整理与发行,致力于将地理位置数据变得更准确.更精确,该 IP 库主要基于 BGP/ASN 数据以及遍布全球的网络监 ...

  7. ElasticSearch 搜索原理

    运行结果:返回5条数据 参考代码ESTestDocumentAPI.java package com.dajiangtai.djt_spider.elasticsearch; import java. ...

  8. ajax 使用 三种方法 设置csrf_token的装饰器

    1. CSRF中间件   CSRF跨站请求伪造 2. 补充两个装饰器  from django.views.decorators.csrf import csrf_exempt, csrf_prote ...

  9. 3.SpringMVC介绍

    1.采用Spring MVC的好处 Dispathcher Servlet必须做如下的事情: 1.根据URI调用相应的action 2.实例化正确的控制器类 3.根据请求参数值来构造表单bean 3. ...

  10. Vue2.0中v-for迭代语法变化(key、index)

    语法发生了变化:http://blog.csdn.net/sinat_35512245/article/details/53966788 新数组语法 value in arr (value, inde ...