floyd算法
2025-11-09 14:28:11
发布于:上海
4阅读
0回复
0点赞
嗯?N<=200好机会我入
#include<bits/stdc++.h>
using namespace std;
int dp[205][205]={0};
int main(){
int n,a,b;
cin>>n>>a>>b;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++){
dp[i][j]=1e9;//初始化
}
}
for(int i = 1;i<=n;i++){
int x;
cin>>x;
dp[i][i]=0;//自家人
if(i+x<=n) dp[i][i+x]=1;//越界条件
if(i-x>=1) dp[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++){
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);//你的搜索比较松弛,但是你的AC弥补了这一部分
}
}
}
if(dp[a][b]!=1e9){
cout<<dp[a][b];
}else{
cout<<-1;
}
return 0;
}
这里空空如也



有帮助,赞一个