当然不是抄的,世界上没人会写出这种代码
80分代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[201][201];
int main()
{
int A,B,i,j,k;
cin>>n>>A>>B;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
a[i][j]=0x7fffffff;
}
}
for(i=1;i<=n;i++)
{
int t;
cin>>t;
if(i+t<=n) a[i][i+t]=1;
if(i-t>0) a[i][i-t]=1;
}
for(i=1;i<=n;i++)
{
a[i][i]=0;
for(j=1;j<=n;j++)
{
for(k=1;k<=n;k++)
{
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
}
}
}
if(a[A][B]<10000000)
{
cout<<a[A][B];
}
else
{
cout<<-1;
}
return 0;
}
100分代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[201][201];
void cs()
{
int i,j,k;
for(i=1;i<=n;i++)
{
a[i][i]=0;
for(j=1;j<=n;j++)
{
for(k=1;k<=n;k++)
{
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
}
}
}
}
int main()
{
int A,B,i,j,k;
cin>>n>>A>>B;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
a[i][j]=0x7fffffff;
}
}
for(i=1;i<=n;i++)
{
int t;
cin>>t;
if(i+t<=n) a[i][i+t]=1;
if(i-t>0) a[i][i-t]=1;
}
cs();
cs();
cs();
cs();
cs();
if(a[A][B]<10000000)
{
cout<<a[A][B];
}
else
{
cout<<-1;
}
return 0;
}