九宫格

题目19.2链接:8 Puzzle
需要自己定义转移状态,并使用BFS来确定最小路径。标准的BFS题,只不过状态不好定义。
代码如下:

#include <iostream>
#include <cstring>
#include <map>
#include <queue>
using namespace std;const int N = 3;
const int N2 = 9;
int dx[5] = {0, 0, 1, -1};
int dy[5] = {1, -1, 0, 0};
//string dir[5] = {"r", "l", "d", "u"};//右、左、下、上
char dir[5] = {'r', 'l', 'd', 'u'};//右、左、下、上
struct Puzzle
{int f[N2];//矩阵数组int space;//空格的下标string path;//路径bool operator < (const Puzzle &p) const {//重载<,以便于map使用其为key值for(int i=0; i<N2; i++){if(f[i]==p.f[i]) continue;return f[i] > p.f[i];}return false;}
};
Puzzle P;
bool isTarget(Puzzle s)
{for(int i=0; i<N2-1; i++){if(s.f[i]!=i+1) return 0;}return 1;
}
int bfs(Puzzle P)
{map<Puzzle, bool> V;queue<Puzzle> Q;Q.push(P);//先进一个初始元素V[P] = true;//标记已访问Puzzle u, v;while(!Q.empty()){u = Q.front();Q.pop();if(isTarget(u)) return u.path.size();//到达目标状态退出int sx = u.space/N, sy = u.space%N;//求空格的坐标//cout << 1 << endl;for(int i=0; i<4; i++)//遍历四个方向{int tx = sx + dx[i], ty = sy + dy[i];//下一步if(tx>=N || tx<0 || ty>=N || ty<0) continue;//出矩阵v = u;//新状态swap(v.f[u.space], v.f[tx*N+ty]);v.space = tx*N+ty;if(!V.count(v))//还没遍历过{V[v] = true;v.path += dir[i];Q.push(v);}}}return -1;
}
int main()
{for(int i=0; i<N2; i++){cin >> P.f[i];if(P.f[i]==0){P.space = i;}}P.path = "";cout << bfs(P) << endl;return 0;
}

挑战程序设计(算法和数据结构)—九宫格相关推荐

  1. 【操作指导 | 代码实现】挑战程序设计竞赛2:算法和数据结构

    书籍封面 第一章 前言 1. 本人衷心建议 ~~~~~~       如果你是一位初学者,我指的是你只会基本的 C/C++ 编程,即使编的很烂,这本书对于你算法和数据结构的提升非常有帮助,所涉及的每一 ...

  2. 《挑战程序设计竞赛》推荐及算法相关书籍吐槽

    前几天,秋叶拓哉(iwi).岩田阳一(wata)和北川宜稔(kita_masa)所著,我(watashi).庄俊元(navi)和李津羽(itsuhane)翻译的<挑战程序设计竞赛>,终于通 ...

  3. 【挑战30天掌握】算法与数据结构!!!

    挑战30天从入门到精通,每日打卡,长期有效,持续关注!!!以下除题目外,答案与解析均原创,转载请标明出处,感兴趣的同学欢迎评论区打卡~, 关注公众号[可与],关注更多新鲜内容 [挑战30天掌握]算法与 ...

  4. koch算法c语言递归,【挑战程序设计竞赛】 递归与分治算法

    [挑战程序设计竞赛] 递归与分治算法 [挑战程序设计竞赛] 递归与分治算法 递归与分治算法穷举搜索题目 思路 代码 科赫曲线题目 思路 代码 将问题分解,通过求解局部性的小问题来解决原本的问题,这种技 ...

  5. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  6. 挑战程序设计竞赛(第2版)》

    <挑战程序设计竞赛(第2版)> 基本信息 作者: (日)秋叶拓哉 岩田阳一 北川宜稔 译者: 巫泽俊 庄俊元 李津羽 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787 ...

  7. ICPC程序设计题解书籍系列之三:秋田拓哉:《挑战程序设计竞赛》(第2版)

    白书<挑战程序设计竞赛>(第2版)题目一览 白书:秋田拓哉:<挑战程序设计竞赛>(第2版) 第1章 蓄势待发--准备篇(例题) POJ1852 UVa10714 ZOJ2376 ...

  8. 算法与数据结构简单启蒙,我当年学习算法走过的坑

    1.碎碎念 我的算法启蒙来自于紫书算法竞赛入门经典,但是不得不说从语言过度到算法,紫书并不是一个很好的开始.当时整本书除了数学和图论其实是看完了的,但真的有印象的大约只有暴力枚举法中枚举排列,子集生成 ...

  9. 算法与数据结构学习资料及面试

    from 算法之美作者:  http://blog.csdn.net/tiandijun/article/details/50550056 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录( ...

最新文章

  1. 如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4
  2. 如何在Java中比较日期? [重复]
  3. opencv mat与avframe互转
  4. docker klee tutorial_在容器中安装新的程序
  5. phonegap html 缩放,phonegap常用事件总结(必看篇)
  6. 树形结构:递归转化为迭代,万能通用方法,分治策略基于栈的实现
  7. [css] 怎么IE6下在使用margin:0 auto;无法使其居中?
  8. numpy where
  9. 〖Linux〗使用ssh登录远程主机,并在本地打开远程图形界面
  10. 一步步教你开发鸿蒙系统应用,So Easy
  11. rabbitmq安装erlang,报错configure: error: /bin/sh ‘/app/otp_src_20.2/erts/configure‘ failed for erts
  12. 计算机专业英语张强华答案,计算机专业英语答案
  13. Ubuntu16.04解决arpspoof时出现arpspoof: libnet_check_iface() ioctl: No such device问题
  14. html九宫格拼图怎么做,朋友圈九宫格拼图照片制作方法
  15. 三代Pacbio进行细菌16S全长测序
  16. U盘有容量有一半不见了,修复U盘
  17. 【Linux入门学习之】Ubuntu常用软件 速配指南之软件参考
  18. Axure RP9——【图片放大预览效果】
  19. web前端 html5 直播功能开发
  20. 便携式心电监护仪——LabVIEW心电信号采集系统设计

热门文章

  1. 51信用卡孙海涛:信用卡账单背后的大数据 | 万物互联创新大会
  2. hibernate常见错误之Unable to locate persister:
  3. windows NTFS文件系统手动数据恢复
  4. 在Windows 7 Media Center中无需电视调谐器观看电视节目
  5. Cuba 设置studio的主题
  6. OC小游戏之英雄打怪兽
  7. 飞腾CPU服务器系统安装问题
  8. 语法数学一点不会?可以学编程吗QAQ
  9. 数字孪生三维铁路管理系统方案
  10. 时钟抖动(Jitter)的基本概念 【转载】