求助巨佬!!!!
查看原帖
求助巨佬!!!!
429818
Smithespics楼主2023/3/12 16:29

以下是我(本蒟蒻)的DFS代码,通过调试只能达到80pt(#9,#10 WA),但是不知道为什么深度遍历不能做到?而通过广度遍历可以达成???

#include<iostream>
using namespace std;
int dx[2] = {1,-1};
int a,b,n,sx;
long long cnt = 0;
int arr[205];
int st[205];
int flag = 0;
int mincnt = 1e6;

void DFS(int x)
{
    if(x == b)
    {
        flag = 1;
        if(cnt <= mincnt)
            mincnt = cnt;
        return;
    }
    else
    {
        for(int i = 0;i < 2;i++)
        {
            sx = x + arr[x]*dx[i];
            if(sx >= 1 && sx <= b && !st[sx])
            {
                cnt++;
                st[sx] = 1;
                DFS(sx);
                cnt--;
            }
        }
    }
}

int main()
{
    cin >> n >> a >> b;
    for(int i = 1;i <= n;i++)
        cin >> arr[i];
    DFS(a);
    if(flag)
        cout << mincnt;
    else
        cout << -1;
    return 0;
}
2023/3/12 16:29
加载中...