首页 > 其他分享 >ABC224做题笔记

ABC224做题笔记

时间:2025-01-14 13:22:15浏览次数:1  
标签:int pos 笔记 棋子 做题 str 九位数 ABC224

Atcoder Begineer Contest 224

D - 8 Puzzle on Graph

题目大意

给定一个 \(9\) 个顶点,\(m\) 条边的图,共有八个棋子分别在 \(p_1,p_2,p_3...p_8\),问最终能否让第 \(i\) 个棋子放在 \(i\) 号节点上。

解题思路

考虑与八数码相同的做法。

将九个顶点对应的状态压缩成一个九位数,即每个定点上对应了哪个棋子。

令第 \(i\) 个定点上最开始的棋子编号是 \(r_i\),没有棋子的顶点 \(u\) 的 \(r_u\) 为 \(9\),就能够生成初始状态。

然后将这个九位数压入队列,跑 BFS 求解,再用一个 \(map\) 记录,最后判断能否达到 \(123456789\) 这个状态。

生成初始状态部分:

string str="999999999"; //一开始都没有摆棋子
for(int i=1,pos;i<=8;i++){
    cin>>pos;
    str[pos-1]=i+'0'; //读入第 i 个棋子的位置后替换相应位置
}

BFS 部分:

mp[str]=1;
q.push(str);

while(!q.empty()){
    str=q.front();
    q.pop();

    int u=1;
    for(int i=0;i<9;i++){
        if(str[i]=='9'){
            u+=i; //找到没有棋子的顶点的位置
            break;
        }
    }

    for(auto v:G[u]){
        string n_str=str;
        swap(n_str[u-1],n_str[v-1]);
        
        if(mp[n_str]){
            continue;
        }

        mp[n_str]=mp[str]+1;
        q.push(n_str);
    }
}

if(!mp["123456789"]) cout<<-1<<"\n"; //如果没有走过,就说明无法到达
else cout<<mp["123456789"]-1<<"\n";

标签:int,pos,笔记,棋子,做题,str,九位数,ABC224
From: https://www.cnblogs.com/Sunbutstfan1106/p/18670580

相关文章

  • THREE.js学习笔记5——FullScreen and Resizing
    这一小节学习FullscreenandResizing将THREE.js渲染的结果铺满整个屏幕,以及避免出现蓝色边框和超过画面限制的滚动renderer.setSize(window.innerWidth,window.innerHeight)*{padding:0;margin:0;}body{overflow:hidden;}.test{position:fixed;......
  • 个人学习笔记:2024年flatpak,snap,appimage信息收集
    Flatpak的重大改进支持Wayland安全上下文协议Flatpak在2024年引入了对Wayland安全上下文协议的支持,这一改进显著提升了沙盒环境的安全性和功能性。通过Wayland合成器的支持,Flatpak能够更精确地控制应用程序的行为,既保证了系统的安全性,又提高了应用程序的功能性......
  • 《Vue.js设计与实现》学习笔记_第二章 框架吗设计的核心要素
    目录1.提升用户的开发体验2.控制框架代码的体积3.框架要做到良好的Tree-Shaking4.框架应该输出怎样的构建产物5.特性开关6.错误处理7.良好的TypeScript类型支持1.提升用户的开发体验提供友好的警告信息有助于开发者快速定位问题。提供必要的警告信息:warn函数......
  • 【学习笔记】TEA/XTEA/XXTEA算法
    1.TEA算法在安全学领域,TEA(TinyEncryptionAlgorithm)是一种分组加密算法,它的实现非常简单,通常只需要很精短的几行代码。TEA算法最初是由剑桥计算机实验室的DavidWheeler和RogerNeedham在1994年设计的。TEA算法使用64位的明文分组和128位的密钥,它使用Feistel分......
  • 做题随笔:P10465
    Solution这里是博客:Tenil,刚刚用上了JS,不妨看看?题意原题链接给定数列\(a_N\),按以下要求分为\(n\)组:每组中的数单调不降。每组中的数在原数列中的下标单调递减/单调递增/先递减再递增。(思考一下双向队列插入值的过程显然有:越往两端的越后入队)存在一种方法,使所有分组拼接......
  • 2025毕设springboot 高校笔记分享系统论文+源码
    系统程序文件列表开题报告内容研究背景在当今信息化高速发展的时代,高校学生的学习方式正经历着深刻的变革。随着互联网的普及和移动智能终端的广泛应用,学生们对于学习资源的获取和分享需求日益增强。然而,传统的笔记记录方式存在诸多不便,如笔记整理繁琐、查找效率低下、缺乏......
  • Win32汇编学习笔记11.游戏辅助的实现
    Win32汇编学习笔记11.游戏辅助的实现-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区-BpSend.net游戏基址游戏基址的概念游戏基址是保持恒定的两部分内存地址的一部分并提供一个基准点,从这里可以计算一个字节数据的位置。基址伴随着一个加到基上的偏移值来确定信息准确......
  • HTML学习笔记记录---速预CSS(2) 复合属性、盒子模型、边框线、浮动、定位
    复合属性写法:{font:font-stylefont-weitghtfont-size/line-heightfont-family}{font:样式粗细字号字体}(书写瞬间为固定的不可更改)block         块级元素      divinline         行内元素      spaninline-block ......
  • LeetCode刷题笔记(Day3)【滑动窗口+螺旋矩阵】
    题号:209.长度最小的子数组力扣题目链接        【注意】:数组所有元素之和都小于target时,要设置返回0,否则会返回INT_MAX 904.水果成篮76.最小覆盖子串【T中字符不按顺序出现也算,T中可能包含重复字符】        76有示例没过去,贴在文章后面啦,希望......
  • 【研发笔记250113】
    势利不好蛇年将至,岁末之际,开发组计划组织聚餐。上周一,我的搭档ligan同学拉了一个聚餐的临时微信群,周知大家,将在1月13日晚去单位附近的八斗鸡欢聚一堂。从上周五我就想到,要在微信上单独通知一个同学————一个即将离职的同学,他叫yaoxchao。yaoxchao同学因为工作考核未过关,我们此......