P1135奇怪的电梯

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,a,b;
long long dis[210][210]; int main(){
//freopen("in","r",stdin);
cin >> n >> a >> b;
if(a == b){
cout << 0 << endl;
return 0;
}
for(int i = 0; i <= n; i++)
for(int j = 0; j <= n; j++)
dis[i][j] = 1e17;
for(int i = 1; i <= n; i++){
int x;
cin >> x;
if(i > x)
dis[i][i - x] = 1;
if( i + x <= n)
dis[i][i + x] = 1;
}
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(dis[i][j] > dis[i][k] + dis[k][j])
dis[i][j] = dis[i][k] + dis[k][j];
if(dis[a][b] == 1e17)
cout << "-1";
else cout << dis[a][b];
return 0;
}
for(int i = 0; i < G.vexnum; i++)
for(int j = 0; j < G.vexnum; j++){
D[i][j] = G.arcs[i][j];
//如果i j之间又弧;将j的前驱置为i;
if(D[i][j] < MaxInt && i != j)
Path[i][j] = i;
//否则-1;
else Path[i][j] = -1; }
for(int k = 0; k < G.vexnum; k++)
for(int i = 0; i < G.vexnum; i++)
for(int j = 0; j < G.vexnum; j++)
//从i经k到j的一条路径更短
if(D[i][k] + D[k][j] < D[i][j]){ D[i][j] = D[i][k] + D[k][j];
//将j前驱改为k
Path[i][j] = Path[k][j];
}

最新文章

  1. express全局安装后无法通过require使用
  2. SASS的一些使用体会(安装-配置-开启firefox的调试)
  3. 配置android环境
  4. 配置sonar、jenkins进行持续审查
  5. php保存base64数据
  6. RHCS集群
  7. android智能家居在线语音控制
  8. STM32F072B-DISCO 深入研究 USB系统
  9. apt-get 总结2
  10. Java 并发 – 线程安全?
  11. Java实验链接
  12. nltk-贝叶斯分类器
  13. 金蝶CLOUD与EAS的区别
  14. Linux 正则表达式_010
  15. 函数和常用模块【day04】:内置函数(九)
  16. VirtualBox 端口转发 SSH
  17. Web API 跨域请求
  18. android 调用系统照相机拍照后保存到系统相册,在系统图库中能看到
  19. Java如何显示工作日(周一至周五)的名称?
  20. literallycanvas的简介

热门文章

  1. Go第三方库之tail
  2. 数据库程序接口——JDBC——功能第二篇——数据源之C3P0数据源
  3. MySQL表的操作02
  4. Flutter 开发入门实践
  5. JS-常用方法合集
  6. python基础之函数,递归,内置函数
  7. uniGUI之文件下载(29)
  8. C# 重载与重写
  9. (办公)记事本_linux网络命令
  10. 喵星之旅-狂奔的兔子-rabbitmq的java客户端使用入门