八数码:我使用了map判重

结果一遍就轻松A题了。

关于map的用法:

①创建一个map

map<char,int>m;

map<string,long long int>m1;

很浅显。。。

②插入

m.insert(make_pair(19260817,"naive"));

m['R']=3;

③判重

我们只需让出现过的key的value值为1/true

那么是否出现过就是:if(m[2])

///

掌握了map的用法之后八数码就很ok了。

基本思想是广搜。我用字符串+结构体表示状态,写了4个函数为上下左右(其实没必要),以及一个check函数。然后就很显然了:

 #include <cstdio>
#include <map>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
map<string,int>m; struct Node
{
string ss;
int k;
}; queue<Node>p;
string aim=""; void check(Node s)
{
if(s.ss==aim)
{
printf("%d",s.k+);
exit();
}
return;
} void up(Node s)
{
int i;
for(i=;i<=;i++) if(s.ss[i]=='') break;
if(i<) return;
//printf("up:i=%d ",i);cout<<s.ss;
swap(s.ss[i],s.ss[i-]);
//cout<<' '<<s.ss<<endl;
check(s);
if(m[s.ss]) return;
m[s.ss]=;
s.k++;
p.push(s);
return;
}
void down(Node s)
{
int i;
for(i=;i<=;i++) if(s.ss[i]=='') break;
if(i>) return;
swap(s.ss[i],s.ss[i+]);
check(s);
if(m[s.ss]) return;
m[s.ss]=;
s.k++;
p.push(s);
return;
}
void left(Node s)
{
int i;
for(i=;i<=;i++) if(s.ss[i]=='') break;
if(i==||i==||i==) return;
swap(s.ss[i],s.ss[i-]);
check(s);
if(m[s.ss]) return;
m[s.ss]=;
s.k++;
p.push(s);
return;
}
void right(Node s)
{
int i;
for(i=;i<=;i++) if(s.ss[i]=='') break;
if(i==||i==||i==) return;
swap(s.ss[i],s.ss[i+]);
check(s);
if(m[s.ss]) return;
m[s.ss]=;
s.k++;
p.push(s);
return;
}
void bfs()
{
while(!p.empty())
{
Node s=p.front();
p.pop();///取点
//cout<<s.ss<<endl;
up(s);
down(s);
left(s);
right(s);
}
return;
} int main()
{
string c;
cin>>c;
if(c==aim)
{
printf("");
return ;
}
m.insert(make_pair(c,));
Node a;
a.ss=c;
a.k=;
p.push(a);
bfs();
return ;
}

AC代码如下:

P1379 八数码naive题,STL的胜利的更多相关文章

  1. 洛谷 P1379 八数码难题 解题报告

    P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初 ...

  2. 洛谷——P1379 八数码难题

    P1379 八数码难题 双向BFS 原来双向BFS是这样的:终止状态与起始状态同时入队,进行搜索,只不过状态标记不一样而已,本题状态使用map来存储 #include<iostream> ...

  3. P1379 八数码问题

    aoapc上的八数码问题,在luogu上也有类似的题,p1379,经典题目,lrj给出了一个算法,同时给出了三种判重的方法.本来想用std::queue改写一下,但是出了各种问题,只好抄代码ac掉这道 ...

  4. [luogu]P1379 八数码难题[广度优先搜索]

    八数码难题 ——!x^n+y^n=z^n 我在此只说明此题的一种用BFS的方法,因为本人也是初学,勉勉强强写了一个单向的BFS,据说最快的是IDA*(然而蒟蒻我不会…) 各位如果想用IDA*的可以看看 ...

  5. 洛谷P1379八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中. 要求解的问题是:给出一种初始布局(初始状态)和目标布局(为 ...

  6. 洛谷 P1379 八数码难题 Label:判重&&bfs

    特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...

  7. luogu P1379 八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...

  8. 【洛谷】P1379 八数码难题(bfs)

    题目 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局 ...

  9. 洛谷 P1379 八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...

随机推荐

  1. 【学亮IT手记】Servlet的生命周期

    1.1 Servlet的生命周期 1.1.1 Servlet的生命周期概述 1.1.1.1 什么是生命周期 生命周期:一个对象从创建到销毁过程. 1.1.1.2 Servlet的生命周期(*****) ...

  2. select非group by字段的方法

    只需要将非group by字段放进函数中即可:

  3. MyBatis映射文件5

    返回map     Map<String,Object> getEmpByResMap(Integer id); <select id="getEmpByResMap&qu ...

  4. js对字符串的一些操作方法

    1.charCodeAt(index); 返回一个整数,代表下标位置上字符的Unicode的编码. 2.fromCharCode(code1,code2,code3,...); code1代表Unic ...

  5. flask保存 文件到本地

    本篇队长介绍一下如何 把前端上传的文件保存 到 后端flask项目目录 首先讲一下上传.保存文件的思路: 第一步:前端通过post请求方式提交上传的文件 <input id="file ...

  6. Hibernate 连接不同数据库的方言

    RDBMS 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS3 ...

  7. Lodop部署web网站 客户端本地打印角色

    Lodop用于客户端本地打印,部署到web网站非常简单,此博文介绍的是混合部署方式,该方式兼容所有浏览器,当浏览器支持np插件的时候,使用Lodop插件方式,浏览器不支持np插件,会用C-Lodop服 ...

  8. ubuntun与qt下载地址

    http://mirrors.melbourne.co.uk/ubuntu-releases/ http://download.qt.io/archive/qt/5.4/5.4.0/ 使用u盘安装ub ...

  9. 第十九天 标准目录与time 模块

      今日内容 1.目录规范 ***** (1)文件夹的规范写法 bin 可执行文件 conf 配置文件 core 主要业务逻辑 db 数据文件 lib 库 (公共代码 第三方模块) log 日志文件 ...

  10. 青蛙的约会 POJ - 1061 (exgcd)

    两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特 ...