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;
}
#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;
}
相关文章推荐
- Github使用学习笔记(三)
- 第一天开通博客
- 快速排序_归纳
- Java多线程(四)、线程池
- 两条命令找到占用你某个端口的程序
- Data Modeling with ERD:数据建模与ERD - 豆丁网
- Android中糟糕的AsyncTask
- 盟聚解说微信朋友圈广告营销
- [LeetCode_PY] Median of Two Sorted Arrays
- Nginx 502错误触发条件与解决办法汇总
- 说说随机数
- redis基础知识
- 只为了证明PHP是最好的语言 3ff8
- Android设计模式系列(11)--SDK源码之策略模式
- Ubuntu 15.10下Qt5的安装实战
- 2016世界最热门的编程语言与薪资揭秘
- //任意进制间转化
- Drawable 新建xml
- 程序员必须知道的十大基础实用算法及其讲解
- Java多线程(三)、线程同步