看我的超长递归
查看原帖
看我的超长递归
1290314
hdh1103楼主2024/3/18 03:22
#include <iostream>
#include<string.h>
#include<sstream>
#include<algorithm>
#include <math.h>
#include <set>
#include <map>
#include <vector>
#include <set>
#include <queue>
#include<stack>
#include<iomanip>

#define ll long long
using namespace std;


ll a[20005];
ll bs = 10000000;
//北东西南
int qiubs(ll x,ll y,ll x1, ll y1,ll i,ll z,ll n)
{
    //找到路径
    if(x==x1&&y==y1)
    {
       // cout<<x<<y<<i<<endl;
        if(z<bs)
        {
            bs = z;
        }
        return 0;
    }
    //整个数组遍历完了
    if(i==n+1)
    {
        return 0;
    }
   // i=1;
   //beifen
    if(a[i]==1)
    {
        //走
        qiubs(x,y+1,x1,y1,i+1,z+1,n);
        //不走
        qiubs(x,y,x1,y1,i+1,z,n);
    }
    if(a[i]==2)
    {
        //走
        qiubs(x+1,y,x1,y1,i+1,z+1,n);
        //不走
        qiubs(x,y,x1,y1,i+1,z,n);
    }
    if(a[i]==3)
    {
        //走
        qiubs(x-1,y,x1,y1,i+1,z+1,n);
        //不走
        qiubs(x,y,x1,y1,i+1,z,n);
    }
    if(a[i]==4)
    {
        //走
        qiubs(x,y-1,x1,y1,i+1,z+1,n);
        //不走
        qiubs(x,y,x1,y1,i+1,z,n);
    }

    return 1;

}

int main()
{
    ll x,y;
    ll x1,y1;
    cin>>x>>y>>x1>>y1;
    ll n;
    cin>>n;
    for(ll i=1; i<=n; i++)
    {
        char c ;
        cin>>c;
        if(c=='N')
        {
            a[i]=1;
        }
        else if(c=='E')
        {
            a[i]=2;
        }
        else if(c=='W')
        {
            a[i]=3;
        }
        else
        {
            a[i]=4;
        }
    }
    qiubs(x,y,x1,y1,1,0,n);
    if(bs==10000000)
    {
        cout<<-1;
    }
    else
    {
        cout<<bs;
    }
    return 0;


}

2024/3/18 03:22
加载中...