问题标题: 为什么总是输出0

0
0
已解决
姚文涛
姚文涛
中级守护
中级守护
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<queue>
#include<vector>
#include<string>
#include<stack>
#include<cstdlib>
using namespace std;
int k[10001];
int n,a,b;
int min_count=100001011;
void go(int a,int count){
    if(a==b){
        if(count<min_count){
            min_count=count;
        }
        return;
    }
    if(a+k[a]<=n)go(a+k[a],count++);
    if(a-k[a]>=1)go(a-k[a],count++);
}
int main(){
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++){
        cin>>k[i];
    }
    if(a+k[a]<=n)go(a+k[a],0);
    if(a-k[a]>=1)go(a-k[a],0);
    cout<<min_count<<endl;
    return 0;
}
/*
3 3 1 2 5
1 1
4 2
2 3
5 4
*/

 


1
已采纳
印无忧
印无忧
新手守护
新手守护

核心代码应该是这样的吧:

    const int dir[2]= {1,-1};
    while (!q.empty())
    {
        coord now=队头;
        弹出;
        if (now.x==b) 返回;
        for (int i=0; i<2; i++)
        {
            int nx=now.x+dir[i]*a[now.x];
            if (判断)
            {
                标记
                把nx与count+1进队
            }
        }

 

0
0
我要回答