博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva-10085-搜索-最远状态的八数码
阅读量:6144 次
发布时间:2019-06-21

本文共 1529 字,大约阅读时间需要 5 分钟。

直接bfs即可,取最后一个状态

#include 
#include
#include
#include
#include
using namespace std;struct Dir{ int x, y;};struct Node{ int x, y; string str = ""; string steps = "";};char st[] = { 'U', 'D', 'L', 'R' };Dir dir[] = { { 0, -1 }, { 0, 1 }, { -1, 0 }, { 1, 0 } };queue
q;const int N = 5;string ans = "";string ansStep = "";int index(int x, int y){ return y * 3 + x;}void bfs(map
repeatMaps){ while (!q.empty()) { Node node = q.front(); q.pop(); int curZero = index(node.x, node.y); string curStr = node.str; for(int i = 0; i < 4; i++) { int nx = node.x + dir[i].x; int ny = node.y + dir[i].y; if(nx < 0 || ny < 0 || nx > 2 || ny > 2) continue; //nextstr string nextStr(curStr); swap(nextStr[index(nx, ny)], nextStr[curZero]); if(repeatMaps.find(nextStr) == repeatMaps.end()) { //未重复 Node n; n.str = nextStr; n.x = nx; n.y = ny; n.steps = node.steps + st[i]; q.push(n); ans = nextStr; ansStep = n.steps; repeatMaps[nextStr] = 0; } } }}int main(){ freopen("d://1.text", "r", stdin); //3x3图 //目标图 int n; cin >> n; int t =1; while (n--) { if(t!=1) cout<
> k; str += k+'0'; if(k == 0) { y = i; x = j; } } Node init; init.steps = ""; init.str = str; init.x = x; init.y = y; q.push(init); map
repeatMaps; repeatMaps[str] = 0; bfs(repeatMaps); cout<<"Puzzle #"<
<

 

posted on
2018-07-29 20:14 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/shuiyonglewodezzzzz/p/9387515.html

你可能感兴趣的文章
使用native 查询时,对特殊字符的处理。
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>
ECSHOP调用指定分类的文章列表
查看>>
分享:动态库的链接和链接选项-L,-rpath-link,-rpath
查看>>
阿里云企业邮箱 在Foxmail 7.0上POP3/IMAP协议设置方法
查看>>
Javascript一些小细节
查看>>
canvas学习总结
查看>>
Javascript的if判断
查看>>
spring cloud gateway 源码解析(3)记录请求参数及返回的json
查看>>
阿里云ECS数据盘格式化与挂载图文教程
查看>>
Flexbox响应式网页布局 - W3Schools视频02
查看>>
【手牵手】搭建前端组件库(二)
查看>>
怎么给视频添加音频或配乐
查看>>
怎么转换音乐格式
查看>>
Leaflet-Develop-Guide
查看>>
每隔1s打印0-5
查看>>
Angular6错误 Service: No provider for Renderer2
查看>>
聊聊flink的BlobStoreService
查看>>
洗牌算法具体指的是什么?
查看>>
HBuilder打包手机app的方法
查看>>