感觉思路没问题,但样例都过不了

回复帖子

@乔奈 2020-08-30 11:28 回复
#include<stdio.h>
int f (int i,int j,int x,int y)
{
    if(i<0||j<0)//走出棋盘 
        return 0;
    if(i==0&&j==0)  终点 
        return 1;
    if (i==x-2||i==x+2)
    {
        if(j==y-1||j==y+1)//马的攻击位置 
        return 0;
    } 
    else if (i==x-1||i==x+1)//攻击位置 
    {
        if(j==y+2||j==y-2)
        return 0;
    } 
    else if(i==x&&j==y)//马的位置 
        return 0;
    else return f(i-1,j,x,y)+f(i,j-1,x,y);   
}
//本题倒着走 从终点回到起点

int main()
{
    int  bx,by,cx,cy;
    scanf("%d%d%d%d",&bx,&by,&cx,&cy);
    int sum=0;
    sum=f(bx,by,cx,cy);
    printf("%d",sum);
    return 0;
}
@卑微 2020-08-30 12:23 回复 举报

建议回溯,不然就像楼下大佬说的,会T飞 同时用矩阵标记不能走到的位置,这样代码会简洁很多

bool ma[30][30];

int dx[10]={0,1,1,2,2,-1,-1,-2,-2};

int dy[10]={0,2,-2,1,-1,2,-2,1,-1};

for (int i=0;i<=8;++i)
{
    if (m1+dx[i]>=0 && m2+dy[i]>=0)
    ma[m1+dx[i]][m2+dy[i]]=true;
}
反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。