HUD1175 连连看 [dfs剪枝]

JAVA审批流程,一个简单表结构设计方案By OU 一、表结构设计1.流程表(process)用于存储审批流程的基本信息。字段名类型描述idBIGINT主键,流程IDname流程名称TEXT流程描述DATETIME创建时间DATETIME更新时间statusTINYINT(1)流程状态(0: 停用, 1: 启用)2.节点表(process_node)用于管理流程中的每个审批节点。字段名类型描述idBIGINT主键,节点IDprocess_idBIGINT流程ID,外键关联process.id。 阅读详情

题目大意: 给定n,m和n行m列的数字矩阵,用整数表示不同的块,0表示通路。接下来q条询问,询问x1 y1 x2 y2之间是否满足连连看的规律。即用一条线(不超过两个弯)将两者连起来,且线段不能越过矩阵边界,不能穿过有块区域。

思路:

通过给定的第一个点开始dfs,可遍历求得通向第二点的路径,只需验证是否满足弯数小于等于2即可。

剪枝:当弯数大于2时,停止。当弯数等于2,但当前方向不指向终点方向,停止。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int m, n;
int s[1005][1005];
int dir[4][2] = {{0,1}, {0,-1}, {1,0}, {-1,0}};
bool vis[1005][1005];
int tx, ty;
bool flag;
void dfs(int x, int y, int d, int t)
{
    if(flag) return;//已经找到解
    if(t>2) return;//弯数大于2
    if(!(x>0 && y>0 && x <= n && y <= m))
        return;//越过矩阵边界
    if(x==tx && y==ty)//找到解
    {
        flag = 1;
        return;
    }
    if(t==2)//当弯数等于2时的剪枝
    {
        if(!(d==0&&ty>y&&x==tx || d==1&&ty<y&&x==tx || d==2&&tx>x&&y==ty || d==3&&tx<x&&y==ty))
            return;
    }
    if(s[x][y] != 0) return;//不是通路
    if(vis[x][y]) return;
    vis[x][y] = 1;

    for(int i = 0; i < 4; ++i)
    {
        int xx = x + dir[i][0], yy = y + dir[i][1];

        if(d != i)
            dfs(xx, yy, i, t+1);
        else dfs(xx, yy, i, t);
    }
    vis[x][y] = 0; //一条路径的搜索停止,则将当前恢复的点vis重置
}

int main()
{
    while(~scanf("%d %d", &n, &m))
    {
        if(!n&&!m)
            break;
        for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            scanf("%d", &s[i][j]);
            //cin >> s[i][j];
        int q;
        cin >> q;
        while(q--)
        {
            int x, y;
            scanf("%d%d%d%d", &x, &y, &tx, &ty);
            //cin >> x >> y >> tx >> ty;
            if(x==tx && y==ty && s[x][y]!=0)
            {
                //cout << "NO" << endl;
                printf("NO\n");
                continue;
            }
            if(s[x][y]==s[tx][ty]&&s[x][y])
            {
                flag = 0;
                memset(vis, 0,sizeof(vis));
                for(int i = 0; i < 4; ++i)
                    dfs(x+dir[i][0], y+dir[i][1], i, 0);
                if(flag)
                    printf("YES\n");
                    //cout << "YES" << endl;
                else
                    //cout << "NO" << endl;
                    printf("NO\n");
            }
            else printf("NO\n");
        }
    }
    return 0;
}


《基于FPGA的数字信号处理》专栏的导航与说明 阅读详情

相关推荐

论文、报告中那些乱七八糟的图(甘特图、卡吉图,桑基图,小提琴图,弦图,螺旋图,风玫瑰图)

在一些论文或报告中,总是会看到一些熟悉的图,但作者总是不能好好说话,非得搞个洋名字、缩写字或者半洋半中的词来显示它多么高大上,有时候这种故弄玄虚、华而不实的写法也实在是让人看了不伦不类,图首先是让读者更容易看懂的,不是让你来故作高深、玩玄学的。

David_jiang 9426

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 -- 1158

告别C盘爆红!手把手教你将WSL2下的Ubuntu 22.04完整迁移到D盘(附清理指南)

本文详细指导如何将WSL2下的Ubuntu 22.04从C盘无损迁移到D盘,包括导出备份、注销原系统、导入新位置等关键步骤,并提供迁移后的优化配置、开发环境衔接及长期维护技巧,帮助用户彻底解决C盘空间不足问题。

weixin_28698059的博客 472

连连看(dfs)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25024Accepted Submission(s): 618...

weixin_30765505的博客 248

人工智能——框架表示法

1975年美国明斯基在“A framework for representing knowledge”提出了框架理论。 1. 框架及框架的一般表示形式 框架:一种描述对象属性的数据结构。 框架的一般表示形式 <框架名> 槽名1: 侧面名1:值1,值2…,值p1 侧面名2:值1,值2…,值p2 侧面名2:值1,值2…,值pm1 槽名2: 侧面名...

weixin_33759269的博客 1641

星载SAR系统参数设计过程自动化方法研究

 本文提出了一种 SAR系统参数自动化设计的 方法。首先,针对部分参数仍需手工选取的现状 建立了最优化求解模型,并给出了 PRF 和波位位 置的优化选取结果,使参数设计流程更加高效便 捷。然后,针对 SAR 系统参数设计过程中部分技 术指标的评测结果不满足用户需求时无法自动调 节的现状,采用 PID 控制器对方位向天线尺寸、信 号带宽、PRF 等参数进行自动调节,使得方位分辨 率、距离分辨率、方位模糊比等技术指标向用户需 求值逐步靠近。通过仿真实验验证了该方法的可 行性,实现了SAR系统参数设计过程的自动化

qq_43416206的博客 1522

hud 1175 连连看

#include #include #include using namespace std; /* 本题所得; 深搜的难点是剪枝, 对于搜索,我们一定要尽量控制进入递归搜索的次数, 对于题目给出的数据 尽量找到不合题意的情况, 将其剪去; 在递归中也是一样,想尽一切办法剪枝, */ int mmap[1005][1005]; int vist[1005][1005];

Acder的专栏 682

FPGA编译加速实战:6大可落地的Vivado优化策略

FPGA编译本质上是NP-hard约束满足问题求解,而非传统软件编译;Vivado作为时序驱动的硬件实现工具链,其耗时瓶颈集中在Implementation阶段的布局布线(PnR)与逻辑优化。理解这一原理,才能跳出‘加线程’‘升版本’等表面优化,转向精准时序约束、增量编译、物理锚点控制、IP配置精简等工程级干预。这些技术手段直接作用于Vivado的Tcl执行流与底层求解空间,显著压缩搜索范围、减少无效迭代——尤其适用于Zynq/UltraScale等中大型项目(LUT > 80K、多时钟域、DDR/PCIe

weixin_34226182的博客 413

计蒜客-连连看(dfs)

连连看 连连看是一款非常有意思的游戏。我们可以把任意两个在图的在边界上的相同的方格一起消掉,比如把两个 444 消掉以后,每次消掉两个方格的时候,都有会获得一个分数,第 iii 次消的分数为 i×i \timesi× 方格的值。比如上面的消法,是第一次消,获得的分数为 1×4=41 \times 4 = 41×4=4。请你帮忙最优操作情况下,获得的分数...

codeswarrior的博客 543

属性基加密(Attribute-based Encryption, ABE)

KP-ABE中,用户的密钥定义了访问策略,密文的属性与策略进行匹配。CP-ABE中,密文定义了访问策略,用户的属性与策略进行匹配。

2201_75392924的博客 1830

【WRF-Urban】WUDAPT详解:An Urban Weather, Climate, and Environmental Modeling Infrastructure

WUDAPT详解:An Urban Weather, Climate, and Environmental Modeling Infrastructure

WW、forever的博客 495

连连看(DFS)

原题链接 连连看 Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u SubmitStatus Description “连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋

HowieMen的博客 619

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动280.1 现象描述280.2 优化分析 openGauss学习笔记-280 ope

超哥的博客 308

hud 1175 连连看(dfs)

连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5387    Accepted Submission(s): 1401 Problem Description “连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍...

iteye_4729的博客 183

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

搜索DFS+BFS和剪枝问题

HUD 1010题意:输入一个n*m的迷宫,和一个T:可以在迷宫中生存的最大时间。S为起点,D为终点。并且,每个格子只能踩一次,且只能维持一秒,然后该块地板就会塌陷。所以你必须每秒走一步,且到D点时,所用时间为T。用深搜。之前,误以为就是找到最短路,结果不是,而是恰好T秒走出迷宫。用DFS,超时可见剪枝的重要。 这题的剪枝主要是两个方面。 1:利用曼哈顿距离剪枝 —– 算出终点到该点的距离,与剩

我要加油了,因为我还有很多NB的梦想! 1054

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

hdu1175连连看 dfs深搜算法

连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 37394    Accepted Submission(s): 9251 Problem Description “连连看”相信很多人都玩过。没玩过也没关系,下

Mystic_beauty的博客 482

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

hdu1175 连连看(bfs+dfs)

连连看 Time Limit : 20000/10000ms (Java/Other)Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 4Accepted Submission(s) : 2 Font: Times New Roman | Verdana | Georgia Font Size: ← →...

weixin_30519071的博客 142

766E Mahmoud and a xor trip[二进制拆位][dfs]

E. Mahmoud and a xor trip time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Mahmoud and Ehab live in a countr

Qer的博客 757

搜索专题训练hdu2510符号三角形

符号三角形的 第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“,2个异 号下面是”-“ 。计算有多少个不同的符号三角形,使其所含”+“ 和”-“ 的个数相同 。 n=7时的1个符号三角形如下:  + + - + - + +  + - - - - +  - + + + -  - + + -  - + -  - -  +  Input每行

Qer的博客 693

Round Numbers[数位DP][二进制]

题意:确定一个给定区间内二进制0不少于1的数字的个数。 区间范围较大。 首先确定用数位DP,不再是十进制DP,采用二进制数DP。记忆化搜索记录状态dp[pos][num0][num1]表示当前位pos位,之前有num0个二进制0,有num1个二进制1的状态下的答案。 在搜索过程中,注意首位1的位置,如果首位1没有确定,那么前置0是不能计入统计的。//#include<bits/stdc++.h>

Qer的博客 681

766D Mahmoud and a Dictionary[带权并查集][dfs]

D. Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Mahmoud wants to write a new di

Qer的博客 524

F(x) [数位DP]

For a decimal number x with n digits (A nA n-1A n-2 … A 2A 1), we define its weight as F(x) = A n * 2 n-1 + A n-1 * 2 n-2 + … + A 2 * 2 + A 1 * 1. Now you are given two numbers A and B, please calculat

Qer的博客 502

Balanced Number [数位DP]

题意:一个数字是Balanced number当且仅当存在一个位置loc,使得一个数字的pos位置上的数字dig_pos*(pos-loc)的和是0。 询问区间内有多少这样的数字。 采用数位DP的方法,对于每一个位置,保存状态dp[pos][loc][sum]表示当前位pos位,中心位置为loc,前面的累加和为sum的状态的答案。 执行call()函数的时候,对于一个区间,loc从1到len遍

Qer的博客 496

HDU6044 Limited Permutation[快速输入][分治]

题意:给定ii从1到n个区间左右端点,描述的第i个区间的最小值必须是第i个数字,问从1~n有多少种符合题意的排列。 题目提示输入使用快速的fread() 对于一个确定的区间li,ril_i, r_i,其中pip_i是其最小值为定数,其余的可能情况就可以按照组合数去组合放到两边,所以从1~n大区间开始分治,对于每个区间,使用stl::map记录区间的编号ii。 对于用到的组合数结果,使用卢卡斯预

Qer的博客 480

B-number[数位DP]

题意: 问一个区间内的数字满足能被13整除,且含有子序列13的数字的个数。 采用数位DP, 记录状态dp[pos][sum][statue]表示当前为pos位,前面求和mod13的值为sum,statue状态下的答案。 其中statue==0表示上一位不是1,statue==1表示上一位是1, statue==2表示前面已经出现过13序列了。#include<bits/stdc++.h> usi

Qer的博客 457

搜索专题训练hdu4403A very hard Aoshu problem

Aoshu is very popular among primary school students. It is mathematics, but much harder than ordinary mathematics for primary school students. Teacher Liu is an Aoshu teacher. He just comes out with a

Qer的博客 449
上一篇: 素数筛算法与素数打表[数学]
下一篇: B. The Queue codeforces398div2
Qer_
博客等级 码龄11年 34粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值