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可 ...
随机推荐
- java mail jar冲突
开发环境:jdk1.6.0_25 MyEclipse-8.6 J2EE5 程序编译通过,J2EE5的库里面已经含有javaee.jar文件.里面的javax.mail包下面是jav ...
- LLVM language 参考手册(译)(5)
垃圾回收器名称(Garbage Collector Names) 每一个函数可以制定一个垃圾回收期的名称,这个名称是一个简单的字符串: define void @f() gc "name&q ...
- php下载文件,添加响应头
//下载,添加响应头信息 header('Content-type:application/octet-stream'); header('Content-Disposition:attachment ...
- 《Linux系统 date、cal、hwclock时间命令的用法》
date命令的用法: [root@apache ~]# date //查看当前系统的时间 Sat Jun 14 13:46:02 CST 2014 [root@apache ~]# date -s & ...
- ADO.NET笔记——利用Command对象的ExecuteScalar()方法返回一个数据值
相关知识: 有些SQL操作,例如SUM,只会从数据库返回一个数据值,而不是多行数据 尽管也可以使用ExecuteReader()返回一个DataReader对象,代表该数据值,但是使用Command对 ...
- JQuery window.opener
$('#Save').click(function () { var parent = $(parent.document.body); $(parent).find('input#add ...
- LitJSON使用
地址:http://lbv.github.io/litjson/docs/quickstart.html LitJSON Quickstart Guide Introduction Quick Sta ...
- Golang学习笔记
一.基础 1. Hello World程序 demo: package main import "fmt" // 注释 //注释 func main() { fmt.Printf( ...
- C#学习笔记一
c#学习笔记一 c#学习笔记一 1 1. 注释 3 1.1. ///是文档注释,用于类和方法的说明 3 1.2. #region #endregion可以折叠代码 ...
- SQL Server 2014 Always on ON Microsoft Azure New Portal(1)
以前假如需要在Azure IaaS 创建的SQL Server AlwaysOn 需要参考以下的步骤 From the MVPs: SQL Server High Availability in Wi ...