A strange lift
2015-08-14 15:14
260 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1548
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,a,b,dist[210],line[210][210],book[210];
int inf=0xfffffff;
int main()
{
while(1)
{
cin>>n;
if(n==0)
break;
cin>>a>>b;
int t;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)
line[i][j]=0;
else
line[i][j]=inf;
memset(book,0,sizeof(book));
for(int i=1;i<=n;i++)
{
cin>>t;
if(i+t<=n)
line[i][i+t]=1;
if(i-t>=1)
line[i][i-t]=1;
}
for(int i=1;i<=n;i++)
dist[i]=line[a][i];
book[a]=1;
for(int i=1;i<n;i++)
{
int min=inf;
int k;
for(int j=1;j<=n;j++)
if(min>dist[j] && !book[j])
{
k=j;
min=dist[j];
}
book[k]=1;
for(int j=1;j<=n;j++)
if(!book[j] && dist[j]>dist[k]+line[k][j])
dist[j]=dist[k]+line[k][j];
}
if(dist[b]==inf)
cout<<"-1\n";
else
cout<<dist[b]<<endl;
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,a,b,dist[210],line[210][210],book[210];
int inf=0xfffffff;
int main()
{
while(1)
{
cin>>n;
if(n==0)
break;
cin>>a>>b;
int t;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)
line[i][j]=0;
else
line[i][j]=inf;
memset(book,0,sizeof(book));
for(int i=1;i<=n;i++)
{
cin>>t;
if(i+t<=n)
line[i][i+t]=1;
if(i-t>=1)
line[i][i-t]=1;
}
for(int i=1;i<=n;i++)
dist[i]=line[a][i];
book[a]=1;
for(int i=1;i<n;i++)
{
int min=inf;
int k;
for(int j=1;j<=n;j++)
if(min>dist[j] && !book[j])
{
k=j;
min=dist[j];
}
book[k]=1;
for(int j=1;j<=n;j++)
if(!book[j] && dist[j]>dist[k]+line[k][j])
dist[j]=dist[k]+line[k][j];
}
if(dist[b]==inf)
cout<<"-1\n";
else
cout<<dist[b]<<endl;
}
return 0;
}
相关文章推荐
- 在Linux下编译安装Apache2(3)
- 美国金融学博士项目和申请介绍
- 【BZOJ1029】【JSOI2007】【建筑抢修】【贪心+堆】
- android开发(30) 使用WebView,点击网页中的链接建立QQ 临时会话 WPA
- Nexus 7更换NFC控制器,导致不再支持读取Mifare Classic NFC 1k Tags
- 选择合适NFC标签
- 微信公众平台开发 - 基础篇
- Oracle导入:转储文件可能是原始的导出文件
- C/C++关于string.h头文件和string类
- 57. Attribute specified 属性
- hdu 5373 - The shortest problem 解题报告
- 异常"Emgu.CV.CvInvoke"的类型初始值
- (转)Jmeter内存溢出处理方式记录
- c#语法糖代码——继承中构造函数的问题,this&base比较
- linux下which,find,whereis区别
- 结算凭证中委托付款部分sql
- Android基于mAppWidget实现手绘地图(七)–根据坐标添加地图对象
- 定制自己的java工具类
- C#实现将数组内元素打乱顺序的方法
- Android中Scroller类的分析