您的位置:首页 > 编程语言 > C语言/C++

A strange lift (HDU1548)

2016-07-04 22:40 363 查看





HDU 1548 bfs(一维)

题意:电梯每层有一个不同的数字,例如第n层有个数字k,那么这一层只能上k层或下k层,

[align=left]            但是不能低于一层或高于n层,给定起点与终点,要求出最少要按几次键。[/align]
[align=left]
[/align]
[align=left]
[/align]
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
#define N 210
struct Node{
int time,flor;
Node(){}
Node(int _f,int _t){
flor = _f;time = _t;
}
};
queue<Node> q;
int k
,vis
;
int solve(int start,int end,int n){
while(!q.empty()) q.pop();
q.push(Node(start,0));
while(!q.empty()){
Node cur = q.front(); q.pop();
if(cur.flor==end) return cur.time;
int up = cur.flor + k[cur.flor];
int down = cur.flor - k[cur.flor];
int tim = cur.time + 1;
if(up<=n&&up>=1&&vis[up]==0){
q.push(Node(up,tim));
vis[up] = 1;
}
if(down<=n&&down>=1&&vis[down]==0){
q.push(Node(down,tim));
vis[down] = 1;
}
}
return -1;
}
void init(int n){
for(int i = 1;i<=n;i++)
vis[i] = k[i] = 0;
}
int main(){
int n,a,b;
while(~scanf("%d%d%d",&n,&a,&b)&&n){
init(n);
for(int i = 1;i<=n;i++) scanf("%d",&k[i]);
printf("%d\n",solve(a,b,n));
}
return 0;
}


[align=left][/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bfs c++ 搜索 acm hdu