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