您的位置:首页 > 其它

hdoj-1548简单的bfs题目

2016-03-14 17:22 302 查看
//运用队列和搜索结合,一切更简单

#include <bits/stdc++.h>
#define maxn 2006

using namespace std;
const int INF=3000;
int op[]= {-1,1};
int N;
int s,g;
int d[maxn];
int mase[maxn];
int dfs()
{
queue<int>que;
for(int i=1; i<=N; i++) d[i]=INF;
d[s]=0;
que.push(s);
while(que.size())
{
int p=que.front();
que.pop();
if(p==g) break;
for(int i=0; i<=1; i++)
{
int nx=p+op[i]*mase[p];
if(nx>=1&&nx<=N&&d[nx]==INF)
{
que.push(nx);
d[nx]=d[p]+1;
}
}
}
return d[g];
}
int main()
{
while(scanf("%d",&N)&&N)
{
memset(d,0,sizeof(0));
scanf("%d %d",&s,&g);
for(int i=1; i<=N; i++) scanf("%d",&mase[i]);
int result =dfs();
if(result>200) printf("-1\n");
else printf("%d\n",result);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: