博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1195 Open the Lock单向广搜
阅读量:6025 次
发布时间:2019-06-20

本文共 1444 字,大约阅读时间需要 4 分钟。

/*RESCUE*/#include 
#include
#include
#include
#include
#include
#include
using namespace std;#define maxn 220char start[6],end[6];bool vis[10005];struct re{ int str[4]; int num; re(const char *a) { num=0; for(int i=0; i<4; ++i) str[i]=a[i]-'0'; } int cal() { return str[0]*1000+str[1]*100+str[2]*10+str[3]; } bool operator ==(const re &tt) const { for(int i=0; i<4; ++i) if(str[i]!=tt.str[i]) return false; return true; }};int main(){ int t; scanf("%d",&t); while(t--) { scanf("%s%s",start,end); re End(end); queue
Q; Q.push(start); memset(vis,false,sizeof(vis)); while(!Q.empty()) { re Beg=Q.front(); Q.pop(); if(Beg==End) { printf("%d\n",Beg.num); break; } Beg.num++; int pp; for(int pos=0; pos<4; pos++) { Beg.str[pos]++; if(Beg.str[pos]==10) Beg.str[pos]=1; if(!vis[pp=Beg.cal()]) { vis[pp]=true; Q.push(Beg); } Beg.str[pos]--; if(Beg.str[pos]==0) Beg.str[pos]=9; Beg.str[pos]--; if(Beg.str[pos]==0) Beg.str[pos]=9; if(!vis[pp=Beg.cal()]) { vis[pp]=true; Q.push(Beg); } Beg.str[pos]++; if(Beg.str[pos]==10) Beg.str[pos]=1; } for(int pos=0; pos<3; pos++) { int tmp=Beg.str[pos]; Beg.str[pos]=Beg.str[pos+1]; Beg.str[pos+1]=tmp; if(!vis[pp=Beg.cal()]) { vis[pp]=true; Q.push(Beg); } tmp=Beg.str[pos]; Beg.str[pos]=Beg.str[pos+1]; Beg.str[pos+1]=tmp; } } }}

 

转载于:https://www.cnblogs.com/A-way/archive/2012/11/15/2772318.html

你可能感兴趣的文章
DescribingDesign Patterns 描述设计模式
查看>>
Bogo排序
查看>>
帮助自定义选择框样式的Javascript - DropKick.js
查看>>
android学习——popupWindow 在指定位置上的显示
查看>>
把Android源代码加入SDK
查看>>
深踩 AndroidStudio 缓存的坑
查看>>
RandomAccessFile和memory-mapped files
查看>>
.NET Core采用的全新配置系统[3]: “Options模式”下的配置是如何绑定为Options对象...
查看>>
MySQL隔离级别
查看>>
URAL 1051 Simple Game on a Grid
查看>>
求时间差的sql语句。 比如如下数据
查看>>
PHP后期静态绑定分析与应用
查看>>
001 有关中文乱码的处理
查看>>
[转载]大型网站运维探讨和心得
查看>>
NIO学习系列:核心概念及基本读写
查看>>
vc中ASSERT()和VERIFY()区别
查看>>
centOS 搭建SVN服务器,提交自动发布代码,详细教程,及注意事项
查看>>
HTML<div><span>字符实体
查看>>
CentOS6.3安装PowerVault MD Storage Manager
查看>>
HTML 表格
查看>>