这题的题意就是,如果在k层,该数的序号为k,则在k层上只能去k+a[k]层或者k-a[k],这样的话,就变成了一个单向联通图,对这个Dijkstra算法就可以了。

#include <cstdio>
#include <string.h>
const int INF=1<<30;
int d[210],w[210][210];
bool vis[200];
int n,k,s,e; void Dijkstra(int s,int e)
{
int min,x;
memset(vis,0,sizeof(vis));
for (int i=0;i<n;i++)
d[i]=w[s][i];
d[s]=0;
vis[s]=1;
for (int k=1;k<n;k++) {
min=INF;
for (int j=0;j<n;j++) {
if (!vis[j]&&d[j]<min) {
min=d[j];
x=j;
}
}
if (min==INF)
break;
vis[x]=1;
for (int i=0;i<n;i++) {
if (!vis[i]&&d[i]>w[x][i]+d[x])
d[i]=w[x][i]+d[x];
}
}
} int main()
{
while (scanf("%d",&n)&&n) {
scanf("%d%d",&s,&e);
s--;
e--;
for (int i=0;i<n;i++) {
for (int j=0;j<n;j++)
w[i][j]=INF;
}
for (int i=0;i<n;i++) {
scanf("%d",&k);
if (i+k<n)
w[i][i+k]=1;
if (i-k>=0)
w[i][i-k]=1;
}
Dijkstra(s,e);
printf("%d\n",d[e]==INF?-1:d[e]);
}
return 0;
}

最新文章

  1. 在React 组件中使用Echarts
  2. 用bootstrap实现多张图片手动轮回
  3. Wind7外接显示器选择拓展模式后,鼠标只能往右移动才能切换到外接显示器上,不能修改切换方向
  4. 开发错误12:gradle编译错误:Conflict with dependency com.android.support:support-annotations
  5. 如何查看linux系统是32位还是64位
  6. Beaglebone Black&ndash; 智能家居控制系统 LAS - 刷 WiFi 模块 ESP8266 Firmware 和 ESP8266 直接收发 GPIO 信号
  7. Python之Fabric模块
  8. 相当管用了 mstha插件
  9. LINUX下中文语言包的安装(转)
  10. bzoj 2763: [JLOI2011]飞行路线 分层图
  11. 转载:Raspberry Pi 树莓派入门
  12. 添加保存less报错
  13. 数据库学习任务三:执行数据库操作命令对象SqlCommand
  14. Linux 下不经过BIOS重启(i386)
  15. PyCharm中设置字体大小
  16. 使用Sublime Text 或 vs2017开发Node.js程序
  17. idea添加JPA导出实体类
  18. JS XMLHttpRequesst对象 http post的五种请求状态
  19. 使用node写一个简单的页面操作
  20. BZOJ3230 相似子串 【后缀数组】

热门文章

  1. 第四章 “我要点爆”微信小程序云开发之疯狂点击与糖果点爆页面制作
  2. linux 搭建unixODBC ,并对接 PostgreSQL 9.3.4
  3. 小试JVM工具
  4. ACM之路
  5. python的正则表达式支持(链接)
  6. python 基础(十) 面向对象
  7. POJ-325Corn Fields
  8. python学习之TCP/UDP
  9. DiscuzX2.5密码错误次数过多,请 15 分钟后重新登录的修改办法
  10. 移动端REM布局模板(阿里高清方案)