首页 > 其他分享 >HDU 1175 连连看 (DFS)

HDU 1175 连连看 (DFS)

时间:2024-01-26 23:11:52浏览次数:20  
标签:HDU x1 连连看 int 1175 y1 x2 return y2

HDU 1175 连连看 (DFS)

题目:给出连连看棋盘,然后有q次询问,每次询问4个数(x1,y1,x2,y2),输出是否能不绕外面且转折不超过两次消除,输出YES/NO

Sample Input

3 4
1 2 3 4
0 0 0 0
4 3 2 1
4
1 1 3 4
1 1 2 4
1 1 3 3
2 1 2 4
3 4
0 1 4 3
0 2 4 1
0 0 0 0
2
1 1 2 4
1 3 2 3
0 0

Sample Output

YES
NO
NO
NO
NO
YES
#include <cstdio>
#include <cstring>
int table[1002][1002];
int dir[4][2] = { {-1,0}, {0, 1}, {1, 0}, {0, -1} };
int n, m, count;
int x2, y2;
bool ok;
bool check(int x, int y) {
    if (x < 0 || x >= n || y < 0 || y >= m) return false;
    if (x == x2 && y == y2) return true;
    else if (!table[x][y]) return true;
    else return false;
}
void dfs(int x1, int y1, int predir) {
    if (count == 3) {
        ok = false;
        return;
    }
    if (x1 == x2 && y1 == y2) {
        ok = true;
        return;
    }
    for (int i = 0; i < 4; i++) {
        int newx = x1 + dir[i][0];
        int newy = y1 + dir[i][1];
        if (check(newx, newy)) {
            if (newx == x2 && newy == y2);
            else table[newx][newy] = 1;
            if (i == predir || predir == -1) {
                dfs(newx, newy, i);
            }
            else {
                count++;
                dfs(newx, newy, i);
                count--;
            }
            if (newx == x2 && newy == y2);
            else table[newx][newy] = 0;
            if (ok) return;
            
        }
    }
}
int main() {
    while (scanf("%d%d", &n, &m)) {
        if (n == 0 && m == 0) break;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                scanf("%d", &table[i][j]);
            }
        }
        int q, x1, y1;
        scanf("%d", &q);
        for (int i = 0; i < q; i++) {
            ok = false;
            count = 0;
            scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
            x1--;
            y1--;
            x2--;
            y2--;
            if (table[x2][y2] && table[x1][y1] == table[x2][y2]) {
                dfs(x1, y1, -1);
            }
            printf("%s\n", ok ? "YES" : "NO");
        }
    }
    return 0;
}

标签:HDU,x1,连连看,int,1175,y1,x2,return,y2
From: https://www.cnblogs.com/zhclovemyh/p/17990926

相关文章

  • HDU2966 In case of failure 题解
    QuestionHDU2966Incaseoffailure给出平面上\(n\)个点坐标,求每个点最近的点的欧几里得距离的平方Solution算是一道K-D树的板子题维度\(K=2\)建立\(K-D\)树,在每一层更新当前最小答案\(now\_ans\),如果在然后继续遍历当前维度下距离\(\le\)的区块随机数据时间复......
  • FlashDuty Changelog 2023-12-18 | 值班管理、服务日历、自定义操作和邮件集成
    FlashDuty:一站式告警响应平台,前往此地址免费体验!值班管理UI交互优化【个人日程】从头像下拉菜单调整到值班列表页面,快速查看个人值班日程【值班列表】支持原地预览最近一周值班情况,包括当前和下一阶段值班人【值班详情】支持日历模式与时间线模式切换,查看月度计划更方便......
  • HDU - 4565So Easy!
    知道这个套路才比较easy\(a_n=(a+\sqrt{b})^n,b_n=(a-\sqrt{b})^n\)且\(0<b_n<1\)令\(c_n=a_n+b_n\),所以\(c_n=\lceila_n\rceil\)联系递推方程\(F_n=pF_{n-1}+qF_{n-2}\)\(a+\sqrt{b},a-\sqrt{b}\)是特征方程\(x^2=px+q\)的两个根算出p,q就可以像斐波那契数列一样用矩......
  • hdu 4990 Reading comprehension(矩阵乘法)
    Readtheprogrambelowcarefullythenanswerthequestion.pragmacomment(linker,"/STACK:1024000000,1024000000")includeincludeincludeincludeincludeincludeconstintMAX=100000*2;constintINF=1e9;intmain(){intn,m,ans,i;while(sc......
  • HDU 4686 Arc of Dream(构造矩阵)
    设\(t_n=a_n*b_n\)把\(a_n和b_n\)拆出来\(t_n=(a_{n-1}*ax+ay)(b_{n-1}*bx+by)\)\(t_n=ax*bx*t_{n-1}+ax*by*a_{n}+ay*bx*b_{n-1}+ay*by\)那么同时维护\(s_n,t_n,a_n,b_n和常数即可\)#include<cstdio>#include<algorithm>#include<cstring>#include&l......
  • 双向广搜-> hdu1195
    问题描述:密码锁有起始和目标两个状态,状态有4个连续数字,数字范围是1~9。其中特殊情况9+1=0,1-1=9。每次操作可以交换相邻的两个锁上的数字,或者将该位上数字±1。求最小操作次数分析:是一道双向广搜的题,但是这个题目的第一个思路就是枚举所有的排列组合状态,然后对每个状......
  • Flashduty 案例分享 - 途游游戏
    Flashduty 作为功能完备的事件OnCall中心,可以接入云上、云下不同监控系统,统一做告警降噪分派、认领升级、排班协同,已经得到众多先进企业的认可。我们采访了一些典型客户代表,了解他们的痛点、选型考虑和未来展望,集成本系列文章,以飨读者。本次有幸在邹老板支持下访谈到途游资......
  • HDU 1404 ”Solitaire“ (双向广搜)
    HDU1404”Solitaire"OJ:https://acm.hdu.edu.cn/showproblem.php?pid=1401题目大意:8*8的棋盘,上面有四个棋子,棋子可以上下左右移动,如果在上下左右移动的时候该位置有一个棋子已经放置,可以跳过这个棋子放在后面,不可以连续跳过两个。给一个初始状态和一个目标状态。是否可以在......
  • 如何解决MySQL Workbench中的错误Error Code: 1175
    错误描述:在MySQLWorkbench8.0中练习SQL语句时,执行一条update语句,总是提示如下错误:ErrorCode:1175.YouareusingsafeupdatemodeandyoutriedtoupdateatablewithoutaWHEREthatusesaKEYcolumnTodisablesafemode,toggletheoptioninPreferences->SQ......
  • FlashDuty Changelog 2023-10-30 | 告警路由与 Slack 应用
    FlashDuty:一站式告警响应平台,前往此地址免费体验!告警路由什么是告警路由?FlashDuty已经与Zabbix、Prometheus等监控系统实现无缝集成,通过一个简单的webhook就可以把告警系统产生的所有告警事件推送到FlashDuty来管理。每个告警事件的重要性、紧急程度和所属团队可能不同,我们期望可以......