过河卒问题我这样解为什么性能很差,有大神指导一下吗
查看原帖
过河卒问题我这样解为什么性能很差,有大神指导一下吗
512665
cloud1219楼主2021/4/20 20:33
#include <stdio.h>

int successCount = 0;

typedef struct
{
    int x;
    int y;
}Pos;
Pos A,B,C,P1,P2,P3,P4,P5,P6,P7,P8;

int belongToHorseContrl(Pos M)
{
    if(
        (M.x==C.x&&M.y==C.y)||
        (M.x==P1.x&&M.y==P1.y)||
        (M.x==P2.x&&M.y==P2.y)||
        (M.x==P3.x&&M.y==P3.y)||
        (M.x==P4.x&&M.y==P4.y)||
        (M.x==P5.x&&M.y==P5.y)||
        (M.x==P6.x&&M.y==P6.y)||
        (M.x==P7.x&&M.y==P7.y)||
        (M.x==P8.x&&M.y==P8.y)
    )
        return 1;
    else
        return 0;
}

int outOfBoundary(Pos M)
{
    if(M.x<0||M.x>B.x||M.y<0||M.y>B.y)
        return 1;
    else
        return 0;
}

int touchBPos(Pos M)
{
    if(M.x==B.x&&M.y==B.y)
        return 1;
    else
        return 0;
}

//int level = 0;
void findNextStep(Pos M)
{
    //level++;
    //printf("第%d层\n", level);
    Pos M1,M2;
    M1.x = M.x+1;
    M1.y = M.y;
    M2.x = M.x;
    M2.y = M.y+1;
    
CheckDown://先判断M1
    if(belongToHorseContrl(M1)==1)
    {
        //printf("第%d层往下属于马\n", level);
        //return;
    }
    else if(outOfBoundary(M1)==1)
    {
        //printf("第%d层往下出界\n", level);
        //return;
    }
    else if(touchBPos(M1)==1)
    {
        //printf("第%d层往下找到B\n", level);
        successCount++;
    }
    else
    {
        findNextStep(M1);
    }
    
CheckRight://再判断M2
    if(belongToHorseContrl(M2)==1)
    {
        //printf("第%d层往右属于马\n", level);
        //return;
    }
    else if(outOfBoundary(M2)==1)
    {
        //printf("第%d层往右出界\n", level);
        //return;
    }
    else if(touchBPos(M2)==1)
    {
        //printf("第%d层往右找到B\n", level);
        successCount++;
    }
    else
    {
        findNextStep(M2);
    }
}

int main()
{
    A.x = 0;
    A.y = 0;
    scanf("%d %d %d %d",&(B.x),&(B.y),&(C.x),&(C.y));
    P1.x = C.x+2;
    P1.y = C.y+1;
    P2.x = C.x+1;
    P2.y = C.y+2;
    P3.x = C.x-1;
    P3.y = C.y+2;
    P4.x = C.x-2;
    P4.y = C.y+1;
    P5.x = C.x-2;
    P5.y = C.y-1;
    P6.x = C.x-1;
    P6.y = C.y-2;
    P7.x = C.x+1;
    P7.y = C.y-2;
    P8.x = C.x+2;
    P8.y = C.y-1;
    findNextStep(A);
    printf("%d",successCount);
    return 0;
}

2021/4/20 20:33
加载中...