挑战程序设计(算法和数据结构)—九宫格
九宫格
题目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;
}
挑战程序设计(算法和数据结构)—九宫格相关推荐
- 【操作指导 | 代码实现】挑战程序设计竞赛2:算法和数据结构
书籍封面 第一章 前言 1. 本人衷心建议 ~~~~~~ 如果你是一位初学者,我指的是你只会基本的 C/C++ 编程,即使编的很烂,这本书对于你算法和数据结构的提升非常有帮助,所涉及的每一 ...
- 《挑战程序设计竞赛》推荐及算法相关书籍吐槽
前几天,秋叶拓哉(iwi).岩田阳一(wata)和北川宜稔(kita_masa)所著,我(watashi).庄俊元(navi)和李津羽(itsuhane)翻译的<挑战程序设计竞赛>,终于通 ...
- 【挑战30天掌握】算法与数据结构!!!
挑战30天从入门到精通,每日打卡,长期有效,持续关注!!!以下除题目外,答案与解析均原创,转载请标明出处,感兴趣的同学欢迎评论区打卡~, 关注公众号[可与],关注更多新鲜内容 [挑战30天掌握]算法与 ...
- koch算法c语言递归,【挑战程序设计竞赛】 递归与分治算法
[挑战程序设计竞赛] 递归与分治算法 [挑战程序设计竞赛] 递归与分治算法 递归与分治算法穷举搜索题目 思路 代码 科赫曲线题目 思路 代码 将问题分解,通过求解局部性的小问题来解决原本的问题,这种技 ...
- 《挑战程序设计竞赛(第2版)》习题册攻略
本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...
- 挑战程序设计竞赛(第2版)》
<挑战程序设计竞赛(第2版)> 基本信息 作者: (日)秋叶拓哉 岩田阳一 北川宜稔 译者: 巫泽俊 庄俊元 李津羽 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787 ...
- ICPC程序设计题解书籍系列之三:秋田拓哉:《挑战程序设计竞赛》(第2版)
白书<挑战程序设计竞赛>(第2版)题目一览 白书:秋田拓哉:<挑战程序设计竞赛>(第2版) 第1章 蓄势待发--准备篇(例题) POJ1852 UVa10714 ZOJ2376 ...
- 算法与数据结构简单启蒙,我当年学习算法走过的坑
1.碎碎念 我的算法启蒙来自于紫书算法竞赛入门经典,但是不得不说从语言过度到算法,紫书并不是一个很好的开始.当时整本书除了数学和图论其实是看完了的,但真的有印象的大约只有暴力枚举法中枚举排列,子集生成 ...
- 算法与数据结构学习资料及面试
from 算法之美作者: http://blog.csdn.net/tiandijun/article/details/50550056 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录( ...
最新文章
- 如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4
- 如何在Java中比较日期? [重复]
- opencv mat与avframe互转
- docker klee tutorial_在容器中安装新的程序
- phonegap html 缩放,phonegap常用事件总结(必看篇)
- 树形结构:递归转化为迭代,万能通用方法,分治策略基于栈的实现
- [css] 怎么IE6下在使用margin:0 auto;无法使其居中?
- numpy where
- 〖Linux〗使用ssh登录远程主机,并在本地打开远程图形界面
- 一步步教你开发鸿蒙系统应用,So Easy
- rabbitmq安装erlang,报错configure: error: /bin/sh ‘/app/otp_src_20.2/erts/configure‘ failed for erts
- 计算机专业英语张强华答案,计算机专业英语答案
- Ubuntu16.04解决arpspoof时出现arpspoof: libnet_check_iface() ioctl: No such device问题
- html九宫格拼图怎么做,朋友圈九宫格拼图照片制作方法
- 三代Pacbio进行细菌16S全长测序
- U盘有容量有一半不见了,修复U盘
- 【Linux入门学习之】Ubuntu常用软件 速配指南之软件参考
- Axure RP9——【图片放大预览效果】
- web前端 html5 直播功能开发
- 便携式心电监护仪——LabVIEW心电信号采集系统设计