news 2026/4/15 14:32:31

leetcode 773. Sliding Puzzle 滑动谜题 耗时100%

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 773. Sliding Puzzle 滑动谜题 耗时100%

Problem: 773. Sliding Puzzle 滑动谜题

解题过程

耗时100%,用深度优先搜索超时了,而且陷入了无限循环,不太好去重的,不知道怎么做了,看了官方的题解,大概理解了其中的意思,广度优先搜索就好多了,去重方便的,状态用数字表示即可,而且步长是相等的,只要找到题目的状态,就是最短的步长,不需要考虑其他的,广度优先搜索需要拿到下一步的状态

int key = board[0][0] * 100000 + board[0][1] * 10000 + board[0][2] * 1000 + board[1][0] * 100 + board[1][1] * 10 + board[1][2] * 1;

Code

class Solution { public: int dir[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} }; int mi = INT_MAX; void dfs(vector<vector<int>>& board, int x, int y, int cnt, unordered_map<int, bool>& ump) { if(cnt > mi) return; int key = board[0][0] * 100000 + board[0][1] * 10000 + board[0][2] * 1000 + board[1][0] * 100 + board[1][1] * 10 + board[1][2] * 1; if(ump[key]==true) return; if(key==123450) { mi = min(mi, cnt); return; } int tmp, xx, yy; ump[key] = true; for(int i = 0; i < 4; i++) { xx = x + dir[i][0]; yy = y + dir[i][1]; if(xx < 0 || yy < 0 || xx >= 2 || yy >= 3) continue; tmp = board[xx][yy]; board[xx][yy] = 0; board[x][y] = tmp; dfs(board, xx, yy, cnt + 1, ump); board[xx][yy] = tmp; board[x][y] = 0; } } int getKey(vector<vector<int>>& board) { int key = board[0][0] * 100000 + board[0][1] * 10000 + board[0][2] * 1000 + board[1][0] * 100 + board[1][1] * 10 + board[1][2] * 1; return key; } int slidingPuzzle(vector<vector<int>>& board) { int i, j, ii = -1, jj = -1, tmp; for(j = 0; j < 3; j++) { if(board[0][j]==0) { ii = 0; jj = j; } } for(j = 2; j >= 0; j--) { if(board[1][j]==0) { ii = 1; jj = j; } } if(getKey(board)==123450) return 0; queue<pair<int, int>> qe; qe.push({getKey(board), 0}); pair<int, int> pr; vector<vector<int>> cpboard = board; int aaa, x, y, xx, yy, kkk; unordered_map<int, bool> ump; while( !qe.empty() ) { pr = qe.front(); cpboard[0][0] = pr.first/100000; aaa = pr.first%100000; cpboard[0][1] = aaa/10000; aaa = aaa%10000; cpboard[0][2] = aaa/1000; aaa = aaa%1000; cpboard[1][0] = aaa/100; aaa = aaa%100; cpboard[1][1] = aaa/10; aaa = aaa%10; cpboard[1][2] = aaa; for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) { if(cpboard[i][j] == 0) { x = i; y = j; break; } } } qe.pop(); if(ump.count(pr.first)!=0) continue; ump[pr.first] = true; for(int i = 0; i < 4; i++) { xx = x + dir[i][0]; yy = y + dir[i][1]; if(xx < 0 || yy < 0 || xx >= 2 || yy >= 3) continue; aaa = cpboard[xx][yy]; cpboard[x][y] = cpboard[xx][yy]; cpboard[xx][yy] = 0; kkk = getKey(cpboard); if(kkk==123450) return pr.second + 1; qe.push({kkk, pr.second + 1}); cpboard[x][y] = 0; cpboard[xx][yy] = aaa; } } // unordered_map<int, bool> ump; // unordered_map<int, bool> umpump; // dfs(board, ii, jj, 0, ump); // if(mi == INT_MAX) return -1; return -1; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 1:32:23

5分钟玩转BilibiliDown:解锁B站音频下载的实用技巧

还在为喜欢的B站背景音乐无处下载而烦恼吗&#xff1f;想将UP主精心制作的音频内容永久保存&#xff0c;却苦于找不到合适的工具&#xff1f;今天&#xff0c;就让我带你全面了解这款备受好评的B站音频下载工具——BilibiliDown&#xff0c;它不仅能下载视频&#xff0c;更是一…

作者头像 李华
网站建设 2026/4/14 5:18:02

MCP不是API替代品!AI Agent开发者的避坑指南,建议收藏细读

MCP是AI与外部工具交互的通用适配器&#xff0c;与API是互补而非替代关系。MCP适合AI自主决策、多工具协作和快速原型验证&#xff0c;而API则在性能敏感、复杂数据操作、安全合规和固定流程场景中更优。开发者应避免盲目滥用MCP&#xff0c;应根据场景精准搭配&#xff1a;用M…

作者头像 李华
网站建设 2026/4/11 5:16:05

大模型代理幻觉全解析:五大类型、十八种触发原因与十种解决方案

这篇文章全面综述了基于LLM的代理幻觉问题&#xff0c;创新性地将代理幻觉分为推理、执行、感知、记忆和通信五种类型&#xff0c;深入分析了十八种触发原因&#xff0c;并总结了十种有效缓解方法&#xff08;知识利用、范式改进、事后验证等&#xff09;。研究为理解LLM代理幻…

作者头像 李华
网站建设 2026/4/15 16:16:17

自然灾害与交通事故无人机检测数据集VOC+YOLO格式372张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数)&#xff1a;372标注数量(xml文件个数)&#xff1a;372标注数量(txt文件个数)&#xff1a;372标注类别数&…

作者头像 李华
网站建设 2026/4/15 2:39:16

2025年中国海洋大学计算机考研复试机试真题(附 AC 代码 + 解题思路)

2025年中国海洋大学计算机考研复试机试真题 2025年中国海洋大学计算机考研复试上机真题 历年中国海洋大学计算机考研复试上机真题 历年中国海洋大学计算机考研复试机试真题 更多学校题目开源地址&#xff1a;https://gitcode.com/verticallimit1/noobdream N 诺 DreamJudg…

作者头像 李华