(广搜)聪明的打字员 -- 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 ...
随机推荐
- 32位汇编基础_cpu 寄存器
32位通用寄存器 EAX EBX ECX EDX EBP ESP ESI EDI 八个寄存器都可以作为普通的数据寄存器使用.但有的有特殊的用途: EAX 为累加器, ECX 为计数器, E ...
- Esxi5-管理平台vcenter5.0_数据库迁移流程
migrating-vcenter-database-express-to-sql-2008-r2 一. 准备环境. ESXi5.0主机 IP:192.168.1.158 ...
- oracle link的创建过程
下面做一个测试,在测试中,创建数据库链接的库为XJ(WINDOWS 2003 ORACLE 10g 10.2.0.1),被链接的库为DMDB(LINUX AS5 ORACLE 10g 10.2.0.1 ...
- Springboot 配置文件加解密
功能介绍 在Spring boot开发过程中,需要在配置文件里配置许多信息,如数据库的连接信息等,如果不加密,传明文,数据库就直接暴露了,相当于"裸奔"了,因此需要进行加密处理才行 ...
- django 短链接改成长连接
from django.conf import settings from django.core.wsgi import get_wsgi_application from gunicorn.app ...
- android 学习 之 布局(上)
学习安卓布局前,先了解三个属性值: 1.fill_parent: 设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间 2.match_parent: And ...
- Angular: Can't bind to 'ngModel' since it isn't a known property of 'input'问题解决
https://blog.csdn.net/h363659487/article/details/78619225 最初使用 [(ngModel)] 做双向绑定时,如果遇见Angular: Can't ...
- HDFS NameNode HA 部署文档
简介: HDFS High Availability Using the Quorum Journal Manager Hadoop 2.x 中,HDFS 组件有三个角色:NameNode.DataN ...
- typedef用法和与define的区别
typedef用来声明一个别名,typedef后面的语法,是一个声明.本来笔者以为这里不会产生什么误解的,但结果却出乎意料,产生误解的人不在少数.罪魁祸首又是那些害人的教材.在这些教材中介绍typed ...
- for 续6
---------siwuxie095 for 实际运用样例(/f 的使用不列出来): for %%i in (*) do echo %%i 显示当前目录下 ,所有非文 ...