(广搜)聪明的打字员 -- 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 ...
随机推荐
- c# 爬虫(二) 模拟登录
有了上一篇的介绍,这次我们来说说模拟登录,上一篇见 :c# 爬虫(一) HELLO WORLD 原理 我们知道,一般需要登录的网站,服务器和客户端都会有一段时间的会话保持,而这个会话保持是在登录时候建 ...
- 部署Web API后Delete请求总是报 405(Method Not Allowed)解决办法
WebDAV 安装IIS的时候如果选择了WebDAV(Web Distribution Authorization Versioning) Publish,则所有的 ...
- Appcan、apicloud、HBuilder 不同之处解析
来源:http://www.mamicode.com/info-detail-1129829.html 现在Hybrid app是一中非常火热的开发模式,在国内对应的开发工具也乱象丛生,有WeX5.c ...
- ACM-Team Tic Tac Toe
我的代码: #include <bits/stdc++.h> using namespace std; int main() { char a[3][3]; int i,j=0; for( ...
- [转]iis 重新安装后 重新注册asp.net
iis 重新安装后 重新注册asp.net 服务器IIS问题: 卸载并重新安装了IIS.... 解决方法:原因是IIS重装后要重新安装一下.NET Framework. 开始-->运行--> ...
- mysql-2 数据类型
mysql中定义数据字段的类型对数据库的优化是非常重要的. mysql数据类型大致分为三类:数值.日期/时间.字符串(字符)类型. 数值类型 MySQL支持所有标准SQL数值数据类型. 这些类型包括严 ...
- 中信信用卡淘气金卡,V金卡,大众点评金卡,易卡白金卡
中信 | 谈谈经典多倍积分卡:易卡&悦卡(超详细+图解+思考)! http://www.flyertea.com/thread-1972766-1-1.html 易卡积分测试,购物/机票/外卖 ...
- 20181124_webAPI基础01_创建一个基础的WebAPI项目
1. webApi属于RESTful架构风格, 而RESTful风格, 是以资源为视角来描述服务的 2. 创建webAPI项目 3. 选择webAPI, 然后mvc会自动引用 4. 点击确定, 就创建 ...
- 2018 Multi-University Training Contest 4-Glad You Came(hdu 6356)
一.思路 线段树维护一个区间最小值,然后对于每次操作,做区间更新即可.要注意的是,在更新的时候,记得剪枝:如果当前更新的值$v \le minv$(minv为当前线段树节点所管辖区间的最小值),直接返 ...
- ubuntu 下出现E: Sub-process /usr/bin/dpkg returned an error code
在用apt-get安装软件时出现了类似于 install-info: No dir file specified; try –help for more information.dpkg:处理 get ...