POJ 3009 基础搜索 DFS 四

本文解析了POJ3009冰壶游戏问题,详细介绍了使用深度优先搜索(DFS)解决该问题的方法。阐述了如何通过递归模拟冰壶的运动轨迹,包括遇到墙壁破碎的情况,并给出了完整的C++实现代码。

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

修改了两天。搜索的题目好理解,但是要多练练手感啊......

 

POJ 3009 冰壶游戏  :http://poj.org/problem?id=3009

题意: 给出 列、行

  给出矩阵。  通路为0,墙壁为1,起点为2,终点为3

 将冰壶起点击出,不碰到墙壁或出界 不会停止。也就是直线运动

  冰壶撞到墙壁后,在墙壁前面停下!!并且墙壁会碎裂!!

  问最少击打次数,使得冰壶经过或停留终点位置。

  题目限定,最少击打数必须小于10。 若无解输出-1 。

 

Vjudge上面没图,洋文没看通透,结果不知道冰壶撞到墙壁墙壁会碎裂。愚蠢的理所让然的写了BFS,结果样例都过不了。

看了百度,才发现墙壁会碎,只能用DFS了....

 

DFS思路:

 每一层递归就是一个击打点。

 击打数超过10就结束;

直接对四个方向进行模拟滑行。

滑出界就停止;滑到终点更新最小值并结束;到墙壁就停下,墙壁碎裂标记,从墙壁前递归下个击打点并之后回溯。

最后输出最小值(起始为无穷大)。若为无穷大则输出-1.

 

值得注意的是题目隐含点:  击打点面朝墙壁,则不可直接击打。 也就是说,冰壶需要至少一格空位滑行才能撞碎墙壁。否则要处理跳过。微笑

 

上DFS代码:

 

#include"cstdio"
#include"queue"
#include"cstring"
#include"algorithm"
using namespace std;
#define inf 999999999

int book[21][21];
int n,m;
int pos[4][2]={0,1,0,-1,1,0,-1,0};
int sx,sy,gx,gy,ans;

int pan(int i,int j)
{
    if(i<0||i>=n||j<0||j>=m)return 0;
    return 1;
}

void dfs(int x,int y,int step)
{
    if(step>10)return;
    for(int i=0;i<4;i++)
    {
        int &dx=pos[i][0];
        int &dy=pos[i][1];
        int rx=x,ry=y;
        if(book[rx+dx][ry+dy]==1)continue;

        while(pan(rx+dx,ry+dy))
        {
            if(book[rx+dx][ry+dy]==0)
            {rx+=dx;
            ry+=dy;
            }
            else if(gx==rx+dx&&gy==ry+dy)
            {   ans=min(ans,step);
                break;
            }
            else
            {book[rx+dx][ry+dy]=0;dfs(rx,ry,step+1);book[rx+dx][ry+dy]=1;break;}
        }

    }

}

int main()
{
    while(~scanf("%d%d",&m,&n)&&n&&m)
    {
        ans=inf;
        memset(book,0,sizeof book);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                scanf("%d",&book[i][j]);
                if(book[i][j]==2)
                {
                    sx=i;sy=j;
                    book[i][j]=0;
                }
                else if(book[i][j]==3)
                    {gx=i;gy=j;}
            }
        dfs(sx,sy,1);
        if(ans==inf)printf("-1\n");
        else
        printf("%d\n",ans);
    }
    return 0;
}

 

 

 

 

 

 

内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值