HDU1175 连连看

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

广搜

判断两点能否相连且路径至多有两个转折。

思路:使用二维数组记录到达某点的最小转弯次数(不是最小步数)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstdlib>
#include<map>
#include<set>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
#define re(x,y) memset(x,y,sizeof(x))
#define rep(x,s,e) for(int x=s;x<e;x++)
#define scan1(x) scanf("%d",&x)
#define scan2(x,y) scanf("%d%d",&x,&y)
#define scan3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define lson i<<1,L,mid
#define rson i<<1|1,mid+1,R
#define M int mid=(L+R)>>1
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxx=1050;
int mx[]= {-1,1,0,0},my[]= {0,0,-1,1};
int mapp[maxx][maxx];
int TU[maxx][maxx];
struct node
{
    int x,y;
    int i;//记录方向
    int turn;
} A,B;
int n,m;
int bfs(int sx,int sy,int ex,int ey)
{
    re(TU,inf);
    A.x=sx,A.y=sy,A.turn=0;
    A.i=-1;
    queue<node>q;
    q.push(A);
    //step[sx][sy]=1;
    while(!q.empty())
    {
        A=q.front();
        q.pop();
        rep(i,0,4)
        {
            B.x=A.x+mx[i];
            B.y=A.y+my[i];
            B.i=i;
            if(B.x<1||B.x>n||B.y<1||B.y>m)continue;
            if(mapp[B.x][B.y]&&(B.x!=ex||B.y!=ey))continue;
            if(!mapp[B.x][B.y])
            {
                if(A.i==-1)B.turn=A.turn;
                else if(A.i==B.i)B.turn=A.turn;
                else B.turn=A.turn+1;
                if(B.turn>2)continue;
                if(TU[B.x][B.y]<B.turn)continue;
                TU[B.x][B.y]=B.turn;
                q.push(B);
            }
            else
            {
                if(A.i==-1)B.turn=A.turn;
                else if(A.i==B.i)B.turn=A.turn;
                else B.turn=A.turn+1;
                if(B.turn>2)continue;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    while(~scan2(n,m),n+m)
    {
        int sx,sy,ex,ey;
        int k=1;
        rep(i,1,n+1)rep(j,1,m+1)scan1(mapp[i][j]);
        int q;
        scan1(q);
        while(q--)
        {
            scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
            if(mapp[sx][sy]==0||mapp[ex][ey]==0||mapp[sx][sy]!=mapp[ex][ey])
            {
                printf("NO\n");
                continue;
            }
            if(bfs(sx,sy,ex,ey))printf("YES\n");
            else printf("NO\n");
        }
    }
}
/*
5 4
2 2 0 1
2 0 0 0
1 0 2 0
0 2 2 0
0 0 0 0
1
1 4 3 1
*/


华为防火墙双线路配置实战:5分钟搞定主备自动切换(含健康检查避坑指南) 本文详细介绍了华为防火墙双线路配置实战,包括主备自动切换和健康检查机制的优化技巧。通过智能健康检查机制,华为防火墙能实现毫秒级故障自动切换,确保网络高可用性。文章提供了从架构设计到实战配置的全流程指南,并分享了常见配置误区与解决方案,帮助中小企业快速搭建稳定可靠的网络架构。 阅读详情

相关推荐

Ubuntu 20.04下大陆ARS408毫米波雷达点云数据采集与RVIZ实时可视化全流程解析

本文详细解析了在Ubuntu 20.04系统下,如何实现大陆ARS408毫米波雷达的点云数据采集与RVIZ实时可视化全流程。内容涵盖硬件连接、ROS Noetic环境搭建、CAN接口配置、数据验证及自动化脚本编写,为机器人感知、自动驾驶等领域的开发者提供了一套稳定、实用的实战方案。

bash7scripter的博客 663

hdu 1175 连连看

点击打开链接 与1728类似,但写出来后一直超时。。。 最后把数组改为1001(原来为1024),就AC了。。 #include"stdio.h" #include"string.h" #include"queue" using namespace std; int dir[4][2]={1,0,0,1,-1,0,0,-1}; int map[1001][1001]; int v

hello_fei 533

【Zephyr存储专题】09_LittleFs文件系统操作

本文档旨在为开发者介绍Zephyr下Littlef's文件系统相关配置使用指南

zero的博客 3213

HDU 1175(搜索题,BFS

连连看<br />Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)<br />Total Submission(s): 2678    Accepted Submission(s): 608<br /><br />Problem Description“连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条

-- bird -- 1154

HDU 1175 连连看BFS处理转折点)

第二个处理附带转折问题的题目 分析:     1.开始时就直接判断 如果起点处和目标点处数字不同,或则起点或终点有一个是0,直接no。     2.因为限定了最小转向次数,所以采用bfs单向搜,hdu 1728与之及其类似 代码: /* Note: 分析: 1.单方向BFS判断转折点,两次转折转折次数为3,从-1开始为2

OhohOh 578

hdu 1175 连连看 [DFS]

题目链接:hdu 1175 连连看 [DFS] 转弯次数不超过两次。和前段时间做的cf那题几乎一样,我又贴一遍。。。最近好懈怠,不想写题。 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string...

dhe56357的博客 177

HDU 1175 连连看

HDU 1175 连连看 题目传送门 Problem Description “连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去。不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的...

anhaoti3785的博客 203

HDU1175 连连看【DFS+剪枝】

连连看 题意: 给定一个n*m的连连看的图,有q次操作,问点击(sx,sy)与(ex,ey)能否使方格消失(!!但是,就算可以消失,也不能改变原图,这q次操作相互之间没有联系)。消失的条件详见题目。 题解: 一开始还以为是判断给定的连连看图能否全部消失,但是只是针对两个方格的询问,并且前后没有联系的话,那只要通过DFS就能做,无非多一个记录路线方向以及拐弯次数。针对这个拐弯次数,可以有一个剪枝,有无这个剪枝,是109MS和6770MS的差距,不过题目给的时间足够长,所以没有剪枝也能过。 #i...

lllllan 297

hdu 1175 连连看

hdu  1175  连连看                    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 BFS水 题目大意:不能从外围通过的,转向限制为2的连连看BFS就好了。 题目分析:二维数组存图,另有visit数组并每次查询前初始化,控turn也很重要。 code: #include #include #incl

slicer的技术交流栈 870

【dfs】hdu 1175 连连看

【dfs】hdu 1175 连连看题目链接:hdu 1175 连连看题目大意连连看,问能否成功?题意很简单,就是我们平时玩的连连看的游戏规则,貌似dfs和bfs都能做,笔者就做了个dfs(好想),超时了好几次,原因是dfs(int d)与终点的d重载矛盾了,所以还是要小心。说一下思路 神器的剪枝:if(t==2&&x!=c&&y!=d) return;这一部剪枝妙笔回春,9000+MS优化到100+

Hacker_vision 794

HDU-1175 连连看

HDU 1175 连连看连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这...

你呢的博客 1033

HDU1175 连连看 DFS

HDU1175 连连看 DFS

qq_44919369的博客 205

HDU - 1175 连连看(dfs)

HDU - 1175 连连看(dfs)    连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去。不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但事实上这是错的。现在已经酿成大祸,就只能...

GYH0730的博客 386

hdu1175 连连看dfs

传送门:hdu1175 其实这个题深搜广搜都可以,但是广搜本来就用的不熟练,再加上还只能转两次弯,根本就不知道该怎么写入队条件,于是果断选择了深搜。。这里有一个重要剪枝是当转弯次数为2的时候先不要进行下一次dfs,直接判断目标点在不在前进方向中就行了,不剪的话铁定超时。。 #include #include #include int n,m,x1,x2,y1,y2,flag=0; int

WA是一笔财富 899

hdu1175- 连连看BFS

Hdu 1175  连连看 Problem Description “连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去。不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但

程序员的冷浪漫 849

HDU 1175 连连看+ HDU 1728 逃离迷宫

HDU 1016连连看 链接:

笙箫默 1048

HDU 1175 连连看(BFS)

HDU1175 连连看(BFS) http://acm.hdu.edu.cn/showproblem.php?pid=1175 Problem Description “连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋

code 1437

hdu1175 连连看

题意:找到两个相同的数字 拐弯个数不能超过2 还有一些限制条件在这里就不在赘述了 思路: 开始我用DFS 结果超时 下次想问题时一定要确定用什么方法去解决问题 总体方针没有正确后面再好也会错 用BFS找 过程中要注意用visited[][]标记每个点的拐弯数 如果遍历到它时 本身拐弯数小于等于该点的 则可以遍历该 点;其他方法都比较基本不在赘述

dashuxiaoai52613的专栏 2171
Ice_SCReam
博客等级 码龄11年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值