HDU1548:A strange lift(BFS)
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 49 Accepted Submission(s) : 22
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
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"?
Input
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.
Output
Sample Input
5 1 5 3 3 1 2 5 0
Sample Output
3
原题:http://acm.hdu.edu.cn/showproblem.php?pid=1548
代码:
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n,a,b,f;
int step[205],vis[205];//step数组记录每一层一次上下的层数,vis数组记录是否访问过,顺便记录步数
bool cheak(int i)
{
if(vis[i]==0&&i>=1&&i<=n)
return true;
return false;
}
int bfs()
{
queue<int> q;
q.push(a);
vis[a]=1;
while(!q.empty())
{
f=q.front();q.pop();
if(f==b)
{
return vis[f];
}
if(cheak(f+step[f]))
{
q.push(f+step[f]);
vis[f+step[f]]=vis[f]+1;
}
if(cheak(f-step[f]))
{
q.push(f-step[f]);
vis[f-step[f]]=vis[f]+1;
}
}
return 0;
}
int main()
{
while(cin>>n)
{
if(n==0)
break;
cin>>a>>b;
for(int i=1;i<=n;i++)
cin>>step[i];
memset(vis,0,sizeof(vis));
int ans=bfs()-1;
cout<<ans<<endl;
}
return 0;
}