hdu 1043 八数码 A*

2025年度工业级3D全景相机技术解析选型参考:国产品牌的技术突围与市场格局 本文分析了工业级3D相机在智慧城市和建筑数字化中的应用。通过对比国内外主流设备的技术参数和应用场景,发现国产品牌如众趣科技在性价比和本地化服务方面具有优势,尤其适合大型空间扫描项目;而国际品牌如Faro、Leica则在精度和可靠性上保持领先。建议根据项目需求(如测距范围、精度要求、预算)进行设备选型,综合考虑扫描效率、数据处理能力和系统兼容性。国产品牌已在国内大型基建项目中展现出竞争力,国际品牌则更适合高精度逆向工程和国际化项目。 阅读详情

曼哈顿距离作为估价函数。

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1043

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <vector>

#define maxn 400000

using namespace std;

struct Node{
    int a[10];
    int x,y;
    int g,h;
    int Hash;
    //bool operator < (const Node n1)const{
    //    return h!=n1.h?h>n1.h:g>n1.g;
    //}
    friend bool operator < (const Node & a1,const Node & a2){
        if(a1.h==a2.h)
            return a1.g < a2.g;
        else
            return a1.h > a2.h;
    }
    bool check(){
        if(x>=0&&x<3&&y>=0&&y<3)
            return true;
        else
            return false;
    }
}s,u,v,tt;

int Hct[10] ={1,1,2,6,24,120,720,5040,40320,362880};
int destination ;
char vis[maxn];
int  pre[maxn];
char d[5] = "rldu";
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};

void Dedug(Node tmp){
    int i;
    for(i=0;i<9;i++){
        printf("%d",tmp.a[i]);
    }
    puts("");
    printf("x : %d y : %d\n",tmp.x,tmp.y);
    printf("g : %d h : %d\n",tmp.g,tmp.h);
    printf("Hash : %d\n",tmp.Hash);
}

int ct(int * a){
    int i,j,con,zans = 0;
    for(i=0;i<8;i++){
        con = 0;
        for(j=i+1;j<9;j++){
            if(a[j]<a[i])con++;
        }
        zans += con * Hct[8-i];
    }
    return zans;
}


/*
int ct(int * a){
    int k=0,res=0;
    for(int i=0;i<9;i++){
        int k=0;
        for(int j=0;j<i;j++)
            if(a[j]>a[i])
                k++;
        res+=Hct[i]*k;
    }
    return res;
}
*/

bool i_sok(int * a){
    int con=0,i,j;
    for(i=0;i<8;i++){
        for(j=i+1;j<9;j++){
            if(a[i]&&a[j]&&a[j]<a[i]){
                con++;
            }
        }
    }
    return !(con&1);
}

int get_h(int * a){
    int ans=0;
    int i,j1,k1,j2,k2;
    for(i=0;i<9;i++){
        if(a[i]){
            j1 = (a[i]-1) / 3;
            k1 = (a[i]-1) % 3;
            j2 = i / 3;
            k2 = i % 3;
            ans += abs(j1-j2)+abs(k1-k2);
        }
    }
    return ans;
}

void Astar(){
    int i;
    priority_queue<Node>q;
    q.push(s);
    while(!q.empty()){
        u = q.top();
        q.pop();
        for(i=0;i<4;i++){
            v = u;
            int temp1 = v.x * 3 + v.y;
            v.x += dx[i];
            v.y += dy[i];
            if(v.check()){
                int temp2= v.x * 3 + v.y;
                v.a[temp1] = v.a[temp2];
                v.a[temp2] = 0;
                v.Hash = ct(v.a);
                if(vis[v.Hash]==-1){
                    vis[v.Hash] = d[i];
                    pre[v.Hash] = u.Hash;
                    v.h = get_h(v.a);
                    q.push(v);
                }
            }
            if(v.Hash==destination)
                return ;
        }
    }
}

void print(){
    string ans = "";
    int i,nxt = destination;
    while(pre[nxt]!=-1){
        ans+=vis[nxt];
        nxt = pre[nxt];
    }
    for(i=ans.length()-1;i>=0;i--){
        cout<<ans[i];
    }
    cout<<endl;
}

int main(void){
    //freopen("a.in","r",stdin);
    char tempa[105];
    int i,k;
    int Tmp[10] = {1,2,3,4,5,6,7,8,0};
    destination = ct(Tmp);
    while(gets(tempa)){
        memset(vis,-1,sizeof(vis));
        memset(pre,-1,sizeof(pre));
        k = 0;
        for(i=0;i<strlen(tempa);i++){
            if(tempa[i]>'0'&&tempa[i]<'9')
                s.a[k++] = tempa[i] - '0';
            if(tempa[i]=='x'){
                s.a[k++] = 0;
                s.x = (k - 1)/3;
                s.y = (k - 1)%3;
            }
        }
        if(!i_sok(s.a)){
            puts("unsolvable");continue;
        }
        s.Hash = ct(s.a);
        vis[s.Hash] = -2;
        if(s.Hash==destination){
            puts("");continue;
        }
        s.h = get_h(s.a);
        s.g = 0;
        //Dedug(s);
        Astar();
        print();
    }
}


解锁微信小程序Camera组件的隐藏技能:连续扫码背后的逻辑与陷阱 本文深入解析微信小程序Camera组件在连续扫码功能中的技术原理与优化方案,涵盖识别率提升、内存管理策略及典型问题排查。通过实战参数对比和代码示例,帮助开发者解决扫码枪应用中的性能损耗与界面卡顿问题,提升零售、物流等场景的工作效率。 阅读详情

相关推荐

车载以太网入坑指南,从小白到懂哥的进阶之路【技术分享】

各位技术大佬们好!最近公司项目涉及到车载以太网,刚开始完全懵逼,花了大半个月时间各种查资料、测试设备,总算是摸清了门道。想着互联网上卧虎藏龙,肯定有不少大佬对这个技术感兴趣,所以写个帖子分享一下,顺便求各位大佬指点。

starelink的博客 1260

HDU 1043 八数码(A*搜索)

在学习八数码A*搜索问题的时候需要知道以下几个点: Hash:利用康托展开进行hash 康托展开主要就是根据一个序列求这个序列是第几大的序列。 A*搜索:这里的启发函数就用两点之间的曼哈顿距离进行计算就可以。 减枝:在八数码里,任意交换一个空行和一个位置的数字,这个八数码的逆序数是不变的,这样就可以根据目前状态判断是否可达终点状态了。 第一次做这个题用的map进行哈希,结果果断超

花月阁 1008

Android11,无障碍服务模拟多手势使用dispatchGesture时总是onCancelled

AccessibilityService的dispatchGesture去模拟多手势,总是onCancelled的一种解决办法

m0_49953943的博客 2102

HDU 1043 八数码问题 A*搜索

转载请注明出处,谢谢 http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents           by---cxlove 第一个A*搜索,A*是一种启发式搜索,g为已花代价,h为估计的剩余代价,而A*是根据f=g+h作为估价函数进行排列,也就是优先选择可能最优的节点进行扩展。 对于八数码问题,以下几个问题需要知道 判断有无解问题:根据逆序数直接判断

窝不是爱酱,喵~~~~ 1万+

【大模型微调】魔搭社区GPU进行LLaMA-Factory微调大模型自我认知

本教程介绍如何使用魔搭社区GPU资源和LLaMA-Factory工具进行大模型微调。主要内容包括环境配置、工具安装、模型训练和效果评估。通过LoRA算法进行自我认知微调,详细说明了从数据准备到模型导出的完整流程,并提供了参数调优和显存管理等实用技巧,帮助读者快速掌握大模型定制化训练方法。

LChuck的博客 2924

树莓派安装snowboy

1、树莓派换源 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113615915 2、更新pip3 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113616214 3、存取麦克风 我们使用PortAudio作为音频输入/输出的跨平台支持。我们还使用sox作为快速实用程序来检查麦克风设置是否正确。 sudo apt-get install python-pyaudio python

qq_43556844的博客 1922

八数码[POJ-1077 | HDU-1043] BFS A* IDA* 双广

  八数码问题,对于一般的数据,BFS+逆序对HASH就可以解决了,或者双广搜索。进一步的话就是A*优化,A*的启发函数有以下两种:1,不在相应位置的格子数目; 2,不在相应位置的曼哈顿距离之和;显然第二种的效率比较高。一中兼顾效率,写起来有方便的算法就是IDA*,因为不要判重,而且是DFS,代码量小。还有猥琐点的方式就是从目标状态向所有状态扩展打表。。。   对于八数码问题,还有一个重要剪枝...

weixin_30782331的博客 185

Mac本地大模型实战指南:Ollama+Metal+Apple Silicon深度优化

大语言模型(LLM)本地化部署正成为开发者关键技术能力,其核心在于推理效率、硬件适配与成本控制。Apple Silicon凭借统一内存架构(UMA)和Neural Engine,为本地LLM运行提供了独特优势;Metal加速则显著提升GPU计算吞吐,使Gemma 4、Qwen 3.5等模型在M系列Mac上实现低延迟、高精度、离线可用的工程落地。相比云端API,本地方案规避了token计费、网络依赖与数据外泄风险,特别适用于企业文档处理、实时语音分析、私有知识库检索等强隐私、低时延场景。本文聚焦Mac平台,系

weixin_33443333的博客 351

POJ1077、HDU1043 Eight 八数码问题:双向BFS、A*

Problem Address:http://poj.org/problem?id=1077 Problem Address:http://acm.hdu.edu.cn/showproblem.php?pid=1043 【前言】 第一次写八数码问题。 这份

Human_CK的专栏 1044

203.华为组网实例:VLAN间互通DHCP中继实验

SW核心交换机上配置DHCP中继。

迷逝 8430

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

算法大师! 524

HDU(1043):八数码的 A* 与 双BFS算法

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1043   说实话,这道题我算是写了很久了,这道题当然也让我收获甚多,作为新手,刚开始的话,我是用 map作为标识,显然这样是行不通的。直到后来,百度上意外搜到了bin神的代码,运用逆序枚举的方法,后面直接打表就行行了,我提交的代码:http://blog.youkuaiyun.com/i_am_a_winer/a

catch_catch的专栏 2019

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9808

【HDU-1043】Eight 八数码(BFS之A*算法)

15 块拼图已有 100 多年的历史,即使你不知道它的名字,也一定见过它。它由 15 块滑动瓷砖组成,每块瓷砖上都有一个从 1 到 15 的数字,所有瓷砖都被装在一个 4×4 的框架内,其中缺少一块瓷砖。我们把这块缺失的瓷砖称为 "x";谜题的目的是将瓷砖排列成以下顺序: 其中唯一合法的操作是将 "x "与与它共享一条边的其中一块牌交换。举例来说,下面的移动顺序可以解决一个略微混乱的谜题:

Tom的博客 806

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Eight HDU - 1043 八数码 A*算法

康托展开判重。也可以用打表和双向bfs做。 第一个A*搜索,A*是一种启发式搜索,g为已花代价,h为估计的剩余代价,而A*是根据f=g+h作为估价函数进行排列,也就是优先选择可能最优的节点进行扩展。可以对f进行关键字耗时600ms, 如果对h作为第一关键字, g作为第二关键字耗时170ms。#include <iostream> #include <cstdio> #include <algori

WsMiracle的博客 503

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Hdu1043 Eight 【A*搜索】八数码问题

http://acm.hdu.edu.cn/showproblem.php?pid=1043 经典八数码问题的启发式搜索 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector&gt...

bantengbang8949的博客 142

Poj1077/HDU1043(A*搜索)八数码问题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043             http://poj.org/problem?id=1077题意:经典的八数码问题,问给出的一个状态能否通过移动达到一个目标状态,如果能就输出一个可行的移动方式.看过好几本书上面都有八数码问题的介绍,采用A*搜索,可一开始写的用不在目标位置上的方块个数作为h(n),可一直超时~然后改成各个方块到目标状态的曼哈顿距离,在北大OJ上AC了,尴尬的是HDU上给了整整五倍的时间,还是超时了

dooder_daodao的专栏 2132

hdu1043 A*算法 八数码问题

题意大致就是让你复原一个八数码拼图,输出具体路径 思路:这里使用的是A*算法,A*算法可能比较陌生,迪杰斯克拉法求最短路相比大家都比较熟悉,A*算法就是他的进化,或者说dij算法是A*算法中把预估函数看为0得到的算法, A*算法的主体是一个路径计算函数:f=g+h,其中g表示的从起始点到某一点的耗费距离,h则表示的是从当前点到目标点的预估耗费,一般在搜图中使用曼哈顿距离,而在本题中则是计算八数...

HPU WIN 327

hdu 1043 八数码问题-A*搜索

http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意。。不再赘述,和小时候玩的玩具很像。 思路:今天人生终于完整了。。。  来一个普通的A*搜索的思路。。。(感觉会不会倒着打表更快?) 所谓A*搜索个人理解就是对于BFS的一个优先级队列优化。。。至于用什么作为关键字就是一个估价函数,你要使得尽量去搜索有价值的答案。。

zxl博客 286

POJ 1077(HDU 1043) Eight(八数码A*算法)

通过演算发现每次一动,逆序对增加一定是偶数对,如果出现奇数则肯定不符合要求,所以要事先判断否则会超时。奇偶剪枝是一种非常常用的剪枝方法,如果在搜索中超时,可以尝试奇偶剪枝。 // // main.cpp // Richard // // Created by 邵金杰 on 16/8/24. // Copyright © 2016年 邵金杰. All rights reserved. //

qq_33901573的博客 484

八数码A*【POJ-1077 HDU-1043】

题目:http://poj.org/problem?id=1077

某科学的程序员 787

HDU 1043 Eight poj 1077 (八数码 启发式搜索)

题目链接 poj1077 hdu1043使用A*搜索就可以了 A*是bfs的一种优化,使用函数F做为每个节点的访问的优先级hdu的需要先判断是否有解,否则会tle,加上后跑了1000+ms poj的不用判断,也可以ac,跑了40+ms一个状态表示成一维的形式,求出除0之外所有数字的逆序数之和,也就是每个数字前面比它大的数字的个数的和,称为这个状态的逆序。 若两个状态的逆序奇偶性 相同,则可

qwesde 584

HDU 1043八数码问题(A*搜索)

   相信看到文章的小伙伴们都知道八数码问题是个怎么回事儿了(虽然我没讲),咱们废话不多说。        八数码问题有很多的解法,双向队列啊,IDA*啊,但这个问题最优的解法几乎就是A*了(听学长们说的,可能IDA*更优但我不会写啊,逃)。A*是个怎么回事儿呢,在我的理解上,A*就是给广搜设立优先级来弥补广搜的缺点,类似剪枝?说不好,大概是那个道理吧。        这道题是我用来练习A*的...

idemor的博客 643

HDU 汉诺塔一类问题 1997 2175 2184 2511

这类汉诺塔问题,都是根据汉诺塔的递归结构而来。hanoi(A,B,C,n) {//把A柱上n个盘子通过B柱移向C柱 hanoi(A,C,B,n-1);//首先把A柱上的n-1个盘子通过C柱移动B柱上 A->C; //把A柱剩下的一个盘子从A柱移到C柱 hanoi(B,A,C,n-1);//再把B柱上的n-1个盘子通过A柱移到C柱上 }HDU 2175题意:求第mm步移动的是哪

NM的专栏 1116
上一篇: hdu 1043 八数码 单向广搜
下一篇: hdu 4946 Area of Mushroom 计算几何
_NMfloat_
博客等级 码龄12年 7粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值