hdu 3766 Knight's Trip

本文探讨了一个跳马问题的解决方法,该问题没有指定棋盘大小且坐标范围极大。作者通过分析发现传统BFS算法效率低下,并最终找到了一种有效的优化方案。文章详细记录了从初步尝试到找到解决方案的心路历程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近练习BFS,看某位大神博客的小结跟着做来着,然后碰到这个...就是跳马的问题.没给出棋盘,就是说没有范围,n,m可以很大,用BFS数据大一点看着很慢,感觉肯定是过不了,大神博客写着:之前需要逼近下,然后再搜索,或者直接枚举判断下就行了。...俩都不会,无法,看看怎么逼近,尝试一小时还是不会。找个数学大神看看有啥规律可循没有。推出来公式之后一直WA....拿着原先的搜索对照测试结果一样不理解...万万没想到啊万万没想到,卧槽换了一种输入方式就AC了...心中万只草泥马奔腾而过啊,一晚上的时间啊 全部浪费这个题了...

题目几个比较坑的地方:范围真的很大,最起码32M内存你开不起。跳马可以跳到坐标是负的地方- -只能说卧槽.还有就是有几个点要单独处理。附上代码:


#include<stdio.h>
#include<string.h>
int main()
{
    char c[20];
    while(scanf("%s",c),c[0]!='E')
    {
        int x=0,y,flag=1;
        int k;
		for(int i=0;c[i];i++)
		{
			if(c[i]=='-'&&i==0)
				flag=-1;
			else
            x=x*10+c[i]-48;
		}
		x=x*flag;
        scanf("%d",&y);
        if(x<0)
            x=-x;
        if(y<0)
            y=-y;
        if(y<x) {k=x;x=y;y=k;}
        if(y<=2*x)
        {
            if(x==1&&y==1)
                printf("2\n");
            else if(x==2&&y==2)
                printf("4\n");
            else
                printf("%d\n",(x+y)/3+(x+y)%3);
        }
        else
        {
            int ans=x;
            int c=(y-2*x)%4;
            ans+=c;
            ans+=(y-2*x-c)/2;
            if(y==1&&x==0)
                ans=3;
            printf("%d\n",ans);
        }
    }
    return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值