hdu 1195 Open the Lock(广搜,简单)
猜密码,问最少操作多少次猜对,思路很简单的广搜,各种可能一个个列出来就可以了,可惜我写的很搓。
不过还是很开心,今天第一个一次过了的代码
#define _CRT_SECURE_NO_WARNINGS
//这是非一般的最短路,所以广搜到的最短的路不一定是所要的路线
//所以应该把所有的路径都搜索出来,找到最短的转折数,看他是不是不大于2
//我是 用边搜索边更新当前路径的最小转弯数 来写的
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
using namespace std;
bool vis[];
int a,b; struct tt
{
int x,step;
}; tt front,rear,temp;
queue<tt>q; void solve(int x,int mark)
{
int x1,x2,x3,x4; x1=temp.x/;
x2=temp.x/-x1*;
x3=temp.x/-x1*-x2*;
x4=temp.x%;
if(mark==)
{
if(x==)
rear.x=x1*+x2*+x3*+x4;
else if(x==)
rear.x=x1*+x2*+x3*+x4;
else
rear.x=x1*+x2*+x3+x4*;
}
else
{
if(x==){
x1+=mark;
if(x1>)x1-=;
else if(x1<)x1+=;
}
else if(x==){
x2+=mark;
if(x2>)x2-=;
else if(x2<)x2+=;
}
else if(x==){
x3+=mark;
if(x3>)x3-=;
else if(x3<)x3+=;
}
else {
x4+=mark;
if(x4>)x4-=;
else if(x4<)x4+=;
}
rear.x=x1*+x2*+x3*+x4;
}
if(!vis[rear.x])
{
rear.step=temp.step+;
q.push(rear);
vis[rear.x]=true;
}
}
int bfs()
{ while(!q.empty())
q.pop();
memset(vis,false,sizeof(vis));
front.x=a;front.step=;
q.push(front);
vis[a]=true;
while(!q.empty())
{
temp=q.front();
if(temp.x==b)
return temp.step;
q.pop();
solve(,);
solve(,-);
solve(,);
solve(,-);
solve(,);
solve(,-);
solve(,);
solve(,-);
solve(,);
solve(,);
solve(,);
}
return ;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&a,&b);
printf("%d\n",bfs());
}
return ;
}
hdu 1195 Open the Lock(广搜,简单)的更多相关文章
- hdu 1195:Open the Lock(暴力BFS广搜)
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 1195 Open the Lock
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1195 Open the Lock Description Now an emergent task f ...
- hdu 1253 胜利大逃亡 (广搜)
题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个 ...
- hdu 1242:Rescue(BFS广搜 + 优先队列)
Rescue Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- HDU 1195 Open the Lock (双宽搜索)
意甲冠军:给你一个初始4数字和目标4数字,当被问及最初的目标转换为数字后,. 变换规则:每一个数字能够加1(9+1=1)或减1(1-1=9),或交换相邻的数字(最左和最右不是相邻的). 双向广搜:分别 ...
- hdu 2717 Catch That Cow(广搜bfs)
题目链接:http://i.cnblogs.com/EditPosts.aspx?opt=1 Catch That Cow Time Limit: 5000/2000 MS (Java/Others) ...
- hdu - 1195 Open the Lock (bfs) && hdu 1973 Prime Path (bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1195 这道题虽然只是从四个数到四个数,但是状态很多,开始一直不知道怎么下手,关键就是如何划分这些状态,确保每一个 ...
- HDU 1372 Knight Moves (广搜)
题目链接 Problem Description A friend of you is doing research on the Traveling Knight Problem (TKP) whe ...
- HDU 1728 逃离迷宫 (广搜)
题目链接 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
随机推荐
- 详解JSTL的forEach标签
详解JSTL的forEach标签 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍. <c:forEach> 标签的语法 说明 : 语法:迭代一集合对象之所有 ...
- c++之RTTI介绍
本文介绍c++的RTTI的基本用法,并初步研究RTTI的实现原理. 1. 什么是RTTI RTTI即运行时类型识别(runtime type identification),用于判断指针或引用所绑定对 ...
- 处理jquery版本之间冲突
处理jquery版本之间冲突 前端开发们都知道jquery版本有好多,之间冲突很纠结.比如我刚来这公司的时候,后端的哥们用的是jQuery 1.3.2,我了个去,那哥们好久没更新了.我写的效果插件都是 ...
- ubuntu 14.04 apt-get 方式安装oracle JDK
之前已经写了 如何手动安装oracle 的JDK :http://www.cnblogs.com/bcsflilong/p/4196536.html 其实 还有可以简单方便的用apt-get 的方式安 ...
- LitJSON使用
地址:http://lbv.github.io/litjson/docs/quickstart.html LitJSON Quickstart Guide Introduction Quick Sta ...
- WinForm 实现验证码
private void CheckIdentifyingCode() { Random r = new Random(); string str = ""; for (int i ...
- i18next-页面层语言国际化js框架介绍
因为工作需要,最近研究了下网站语言国际化的问题,根据当前项目架构,寻求一种较好的解决方案.首先总结下项目中语言切换实现方式大概有以下几种: 1,一种语言一套页面,如:index_CN.html,ind ...
- CF 148A Insomnia cure
题目链接:传送门 题目大意:就是给四个数,和一个d,问1-d中有多少个数字不是那四个数的倍数; 这道题的d数据很小直接暴力可以过: 暴力代码:时间复杂度O(1): #include<stdio. ...
- 拥抱ARM妹纸第二季 之 第三次 给我变个月亮,让约会更浪漫!
嗯嗯,效果不错.趁着这个热乎劲,接到俺的LED测试板上试试.呃~~~ 竟然和小LED的效果不一样啊,不一样.不但闪烁而且完全没有调光效果.郁闷内,查查原因呗.看看那里出问题.迅速在PT4115手册里翻 ...
- oracle建用户
create user ng_zj identified by ng_zjdefault tablespace tbs_testtemporary tablespace tbs_test_tmp; g ...