hdu 1548 A strange lift (bfs)
A strange lift
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8550 Accepted Submission(s): 3241
Here comes the problem: when you are on floor A,and you want to go to floor B,how many times at least he has to press the button "UP" or "DOWN"?
The first line contains three integers N ,A,B( 1 <= N,A,B <= 200) which describe above,The second line consist N integers k1,k2,....kn.
A single 0 indicate the end of the input.
3 3 1 2 5
0
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std; int t[210],vis[210];
int n,a,b;
struct node
{
int cur;
int steps;
}start; int bfs()
{
queue<node> q;
while(!q.empty())
q.pop();
start.cur=a;
start.steps=0;
vis[a]=1;
q.push(start);
node m,temp;
while(!q.empty())
{
temp=q.front();
q.pop();
if(temp.cur==b)
return temp.steps;
int up=temp.cur+t[temp.cur];
if(!vis[up]&&up<=n)
{
vis[up]=1;
m.cur=up;
m.steps=temp.steps+1;
q.push(m);
}
int down=temp.cur-t[temp.cur];
if(!vis[down]&&down>0)
{
vis[down]=1;
m.cur=down;
m.steps=temp.steps+1;
q.push(m);
}
}
return -1;
} int main()
{
while(scanf("%d",&n)&&n)
{
memset(vis,0,sizeof(vis));
scanf("%d%d",&a,&b);
for(int i=1;i<=n;i++)
scanf("%d",&t[i]);
printf("%d\n",bfs());
}
return 0;
}
|
8799270 |
2013-08-02 09:08:53 |
Accepted |
0MS |
248K |
C++ |
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int t[210];
int tot1,tot2,n,a,b;
bool vis[210];
int flag1,flag2;
int res1,res2; void dfs1(int x)
{
//printf("now=%d\n",x);
//printf("tot=%d\n",tot);
if(flag1) return;
vis[x]=true;
if(x==b)
{
res1=tot1;//printf("%d\n",tot);
flag1=1;
return;
}
else if(x>n||x<1) return;
else
{
if(x+t[x]<=n&&vis[x+t[x]]==false)
{
tot1++;
dfs1(x+t[x]);
tot1--;
if(flag1) return;
}
if(x-t[x]>=1&&vis[x-t[x]]==false)
{
tot1++;
dfs1(x-t[x]);
tot1--;
}
}
} void dfs2(int x)
{
//printf("now=%d\n",x);
if(flag2) return;
vis[x]=true;
if(x==b)
{
res2=tot2;
flag2=1;
return;
}
else if(x>n||x<1) return;
else
{
if(x-t[x]>=1&&vis[x-t[x]]==false)
{
tot2++;
dfs2(x-t[x]);
tot2--;
if(flag2) return;
}
if(x+t[x]<=n&&vis[x+t[x]]==false)
{
tot2++;
dfs2(x+t[x]);
tot2--;
}
}
} int main()
{
int i;
while(scanf("%d",&n)&&n)
{
tot1=tot2=0,flag1=flag2=0;
res1=0,res2=0;
memset(vis,0,sizeof(vis));
scanf("%d%d",&a,&b);
for(i=1;i<=n;i++)
scanf("%d",&t[i]);
if(a==b) printf("0\n");
else if(a>n||b>n) printf("-1\n");
else
{
dfs1(a);
memset(vis,0,sizeof(vis));
dfs2(a);
if(flag1==0&&flag2==0) printf("-1\n");
else if(flag1==0&&flag2) printf("%d\n",res2);
else if(flag1&&flag2==0) printf("%d\n",res1);
else printf("%d\n",res2>=res1?res1:res2);
}
}
return 0;
} /* 5 1 4
2 3 1 2 1 ans=2 5 1 5
2 3 1 2 1 ans=3 5 1 5
3 1 1 2 1 ans=-1 3 2 2
1 1 1 ans=0 */
hdu 1548 A strange lift (bfs)的更多相关文章
- hdu 1548 A strange lift
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Description There is a strange li ...
- hdu 1548 A strange lift 宽搜bfs+优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 There is a strange lift.The lift can stop can at ...
- HDU 1548 A strange lift (bfs / 最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Time Limit: 2000/1000 MS (Java/Ot ...
- HDU 1548 A strange lift(BFS)
Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ...
- HDU 1548 A strange lift(最短路&&bfs)
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU 1548 A strange lift (Dijkstra)
A strange lift http://acm.hdu.edu.cn/showproblem.php?pid=1548 Problem Description There is a strange ...
- HDU 1548 A strange lift 搜索
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- HDU 1548 A strange lift (广搜)
题目链接 Problem Description There is a strange lift.The lift can stop can at every floor as you want, a ...
- HDU 1548 A strange lift 题解
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
随机推荐
- Unity C# 游戏间物体间的访问
脚本语言:C# 1.在Unity工程中新建两个物体:Cube和Sphere 2.分别为Cube和Sphere添加脚本CubeScript和SphereScript: 在SphereScript这两个定 ...
- libc.so.6 误删后修复
libc.so.6 误删后修复 libc.so.6 被删除了(libc.so.6只是个链接,真实的lib 文件是 libc-2.15.so) su, sudo,ls, cp, mv 等等一系列命令都 ...
- linux内核空间与用户空间信息交互方法
linux内核空间与用户空间信息交互方法 本文作者: 康华:计算机硕士,主要从事Linux操作系统内核.Linux技术标准.计算机安全.软件测试等领域的研究与开发工作,现就职于信息产业部软件与 ...
- Linux Shell编程(7)——变量赋值
=赋值操作符(它的左右两边不能有空白符) 不要搞混了=和-eq,-eq是比赋值操作更高级的测试.注意:等于号(=)根据环境的不同它可能是赋值操作符也可能是一个测试操作符.例子:简单的变量赋值 #!/b ...
- linux配置端口转发
一.使用rinted进行端口转发 将10.50.13.13 80请求转到10.50.13.11 80上 1.安装rinetd $ tar zxf rinetd.tar.gz $ cd rinetd $ ...
- 在Ubuntu中安装Redis
原文地址:http://blog.fens.me/linux-redis-install/ 在Ubuntu中安装Redis R利剑NoSQL系列文章,主要介绍通过R语言连接使用nosql数据库.涉及的 ...
- 浅谈数据库系统中的cache
Cache和Buffer是两个不同的概念,简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据.在很 ...
- JPA query 基本语法解释
详细语法官网去学习 -->> http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference Qu ...
- swfit-小知识Demo
知识点: 重写方法.属性,自动引用计数,throws异常抛出,滚动视图,扩展语法,协议,计时器,UserDefaultsgit项目地址: https://github.com/lu459700780/ ...
- Linux散列表(一)——操作函数
散列表(又名哈希表)仅仅需要一个包含单一指针的链表头.它是双向链表的变体.它不同于双链表——表头和结点使用相同的结构体——散列表对表头和结点有不同的定义.如下: struct hlist_head { ...