首页 > 其他 > 详细

hdoj-1548简单的bfs题目

时间:2016-03-14 18:41:04      阅读:122      评论:0      收藏:0      [点我收藏+]

//运用队列和搜索结合,一切更简单

#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;
}

hdoj-1548简单的bfs题目

原文:http://www.cnblogs.com/cshg/p/5276445.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!