哈哈哈,小伙子,很有善心 这是你的代码 正确的 拿去吧
#include<bits/stdc++.h>
using namespace std;
typedef struct
{
int step;
int floor;
} dt;
queue<dt>lift;
bool flag[2000],f;
int main()
{
int n,a,b,k[2000];
dt s,e;
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
{
cin>>k[i];
}
s.step =0;s.floor =a;
lift.push(s);
while(!lift.empty())
{
s=lift.front();
lift.pop() ;
if(s.floor ==b)
{
cout<<s.step<<endl;
f=1;
break;
}
if(s.floor +k[s.floor]<=n&&!flag[s.floor+k[s.floor]])
{
e.floor =s.floor+k[s.floor];
e.step =s.step +1;
flag[e.floor]=1;
lift.push(e);
}
if(s.floor -k[s.floor]>=1&&!flag[s.floor-k[s.floor]])
{
e.floor =s.floor-k[s.floor];
e.step =s.step +1;
flag[e.floor]=1;
lift.push(e);
}
}
if(f==0) cout<<"-1"<<endl;
return 0;
}
共 4 条回复
什么长解,看我的:
#include<bits/stdc++.h> using namespace std; int N,A,B,ret=-1,s=0,a[201]; bool f=0,b[201]; void dfs(int t){if(ret!=-1) return ; f(t==B){ret=s; return ;}if(t+a[t]<=N&&b[t+a[t]]==0) ++s,b[t]=1,dfs(t+a[t]),b[t]=0;if(t-a[t]>0&&b[t-a[t]]==0) ++s,b[t]=1,dfs(t-a[t]),b[t]=0;--s; return ;} int main(){cin>>N>>A>>B;for(int i=1;i<=N;++i) cin>>a[i];dfs(A);cout<<ret;return 0;}
@061hjl kisama!!!
呵呵
让我康康有多少小伙子是富有善心的
请扣1