八数码:我使用了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代码如下:

最新文章

  1. CentOS 6.5 yum安装配置lnmp服务器(Nginx+PHP+MySQL)
  2. NLog配置文件写入数据库中
  3. Anyconnect的VPN环境部署(2)-在Linux客户机上连接Anyconnect
  4. angularjs简述
  5. 关于matlab中特殊字符, 上标和下标
  6. timer的使用
  7. GLSL学习_高斯滤波
  8. 【网络流24题】No.4 魔术球问题 (二分+最小路径覆盖)
  9. 李洪强iOS开发Swift篇—02_变量和常量
  10. 【转】iOS使用NSMutableAttributedString实现富文本
  11. RxJava RxAndroid【简介】
  12. java 之 适配器模式(大话设计模式)
  13. python爬微信公众号前10篇历史文章(4)-正则表达式RegularExpressionPattern
  14. 赛码网算法: 上台阶 ( python3实现 、c实现)
  15. python操作注册表
  16. 这 10 款良心 Windows 软件,改变你对国产的认知
  17. listcontrolc插入列时,出现断言错误
  18. react 生命周期函数
  19. Spring IOC 容器源码分析系列文章导读
  20. PS小技巧之完美抠图

热门文章

  1. Netty ByteBuf 和 String 转换
  2. maven 中的pom中的 dependencyManagement 和 dependencies
  3. Yii2写日志总结
  4. python数据结构与算法第十二天【快速排序】
  5. sqlserver数据库性能测试方法
  6. matlab——sparse函数和full函数
  7. 如何使用CSS 让Table的最后一列的右边框不显示
  8. PKU2018校赛 H题 Safe Upper Bound
  9. VM下安装Kali虚拟机
  10. LOJ2980 THUSC2017大魔法师(线段树+矩阵乘法)