感觉思路没问题,代码不知道哪里出错了,求纠正
  • 板块P2689 东南西北
  • 楼主jorkid
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/16 15:02
  • 上次更新2024/3/16 16:34:50
查看原帖
感觉思路没问题,代码不知道哪里出错了,求纠正
1291439
jorkid楼主2024/3/16 15:02
#include <iostream>
#include <algorithm>
using namespace std;
int x1,y1,x2,y2,t;//起点和终点坐标,t时刻
char in[55];//存储每个时刻的风向
int s=0,r=0,mi=500,st=0;//s为返回值,r判断是否到达了终点,mi存储最小步数,st存储停留次数;
int setnow(int a,int b,int c,int d,int p);//输入起点终点,以及开始时刻;

int main()
{
    cin>>x1>>y1>>x2>>y2;
    cin>>t;
    for(int i=0;i<t;i++){
        cin>>in[i];//输入风向
    }

    cout<<setnow(x1,y1,x2,y2,0);
    return 0;
}

int setnow(int a,int b,int c,int d,int p)
{

    if(a==c&&b==d){//到达终点
        r=1;
        if(p-st<mi)mi=p-st;//判断使用步数(p时刻能走的距离-停留的次数),若更小则mi保存;
    }
    if(p>=t)return s;//结束;
    for(int i=0;i<=1;i++){//进行两个选择
        if(i==0){//顺风而行
            if(in[p]=='E')
                s=setnow(a+1,b,c,d,p+1);//向东起点横坐标加一,进入下一个时刻;
            else if(in[p]=='W')
                s=setnow(a-1,b,c,d,p+1);//向西起点横坐标减一,进入下一个时刻;
            else if(in[p]=='N')
                s=setnow(a,b+1,c,d,p+1);//向北起点纵坐标加一,进入下一个时刻;
            else if(in[p]=='S')
                s=setnow(a,b-1,c,d,p+1);//向南起点纵坐标减一,进入下一个时刻;
        }
        if(i==1){//停留
            s=setnow(a,b,c,d,p+1);st++;}//停留起点坐标不变,进入下一个时刻;
    }
    if(r==0)return -1;//未到达返回-1;
    else return mi;//到达了,返回最小值;
}

2024/3/16 15:02
加载中...