(广搜)聪明的打字员 -- POJ --1184
链接:
http://poj.org/problem?id=1184
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#problem/B (密码:0817)
不同的代码风格,这种在搜时有多种选择的,写了函数感觉看着也方便些, 借鉴
搜索的时候可以去除一些无用的状态,可以发现一个点的值(2-5)如果想要改变那么光标必须在该点处,所以当光标在2-5位置时候,必须要要把值变为与目标位置处一样才可以移动。
代码:
#include<stdio.h>
#include<string.h>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
#define INF 0x3fffffff
#define N 205
bool vis[][]; struct node
{
int step, num, k; ///k代表的是光标所在的位置
node (int step=, int num=, int k=):step(step), num(num), k(k) {}
}; void GetNum(int A,int c[])
{
int k = ;
while(k)
{
c[k] = A%;
A /= ;
k--;
}
} node OpNum(int c[], int i, node p)
{
if(i==)
swap(c[], c[p.k]);
else if(i==)
swap(c[], c[p.k]);
else if(i== && c[p.k]!=)
c[p.k]++;
else if(i== && c[p.k]!=)
c[p.k]--;
else if(i== && p.k!=)
p.k--;
else if(i== && p.k!=)
p.k++; int k=;
p.step ++;
p.num = ; while(k<=)
p.num = p.num * + c[k++]; return p;
}
int BFS(int a, int b)
{
int c[], d[];
node p, q; GetNum(b, d);
memset(vis, false, sizeof(vis));
vis[][a] = true; queue<node>Q;
Q.push(node(, a, )); while( Q.size() )
{
p = Q.front(); Q.pop(); if(p.num==b) return p.step; for(int i=; i<; i++)
{
GetNum(p.num, c);
if(p.k>= && p.k<= && (i== || i==) && c[p.k]!=d[p.k]) ///很重要,但我还没理解为什么,等等要问问
continue; q = OpNum(c, i, p); if(!vis[q.k][q.num])
{
vis[q.k][q.num] = true;
Q.push(q);
}
}
}
return -;
} int main()
{
int A, B;
while(scanf("%d%d", &A, &B)!=EOF)
{
printf("%d\n", BFS(A, B));
}
return ;
}
(广搜)聪明的打字员 -- POJ --1184的更多相关文章
- (广搜)Dungeon Master -- poj -- 2251
链接: http://poj.org/problem?id=2251 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2137 ...
- 双向广搜 POJ 3126 Prime Path
POJ 3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16204 Accepted ...
- 广搜+打表 POJ 1426 Find The Multiple
POJ 1426 Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25734 Ac ...
- POJ 3984 迷宫问题 记录路径的广搜
主要是学一下如何在广搜中记录路径:每找到一个点我就记录下这个点是由那个点得来的,这样我找到最后个点后,我就可以通过回溯得到我走过的路径,具体看代码吧~ #include<cstdio> # ...
- 广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85 http://poj.org/problem?id=1130 这 ...
- poj 3984:迷宫问题(广搜,入门题)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7635 Accepted: 4474 Description ...
- poj 3278:Catch That Cow(简单一维广搜)
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 45648 Accepted: 14310 ...
- poj 3026 Borg Maze 最小生成树 + 广搜
点击打开链接 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7097 Accepted: 2389 ...
- POJ 2251 Dungeon Master(广搜,三维,简单)
题目 简单的3d广搜,做法类似与 hdu 的 胜利大逃亡 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<str ...
随机推荐
- 东芝笔记本Satellite M40-A
1. 问题:开机F2/Fn+F2进入不了BIOS 原因:当安装了Windows10/Windows8并且开启了快速启动,开机F2会进入不了BIOS或者F12进入不了U盘启动选择 解决方法:进入 开始- ...
- 【python】FTP客户端
Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下 ftp登陆连接 from ftplib import FTP #加 ...
- Tomcat服务器学习和使用(二)
一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:
- Bootstrap-Plugin:轮播(Carousel)插件
ylbtech-Bootstrap-Plugin:轮播(Carousel)插件 1.返回顶部 1. Bootstrap 轮播(Carousel)插件 Bootstrap 轮播(Carousel)插件是 ...
- [转]Jsp 与 JavaBean
JavaBean 是一个遵循特定写法的 Java 类,它有以下特点: 1. Java 类具有一个无参的构造函数 2. 属性必须私有化. 3. 私有化的属性通过 public 类型的方法暴露给其它程序, ...
- [Winform][C#]获取系统颜色预定义颜色和现有字体集
转自: http://zhidao.baidu.com/link?url=ozY7tJRNBYHUsImE6jn1psqc8owib7MWcDMEmZw48q8iD9Hz9MWgnQQcBDO0VYO ...
- UNITY插件信息收集
2018.8.7 UNITY超级优化神器 : Amplify Impostors
- LUA全总结
------------------------------------------------------------------------------ --2018.7.21 do --开启或关 ...
- LUA table.sort的问题,数组与表的区别
t = { [] = , [] = , [] = , [] = , } t1 = { , , , , } t2 = { 'a', 'b','d','c', } function cmp(v1, v2) ...
- 迷你MVVM框架 avalonjs 学习教程2、模块化、ViewModel、作用域
一个项目是由许多人分工写的,因此必须要合理地拆散,于是有了模块化.体现在工作上,PM通常它这为某某版块,某某频道,某某页面.某一个模块,必须是包含其固有的数据,样式,HTML与处理逻辑.在jQuery ...