首页 > 其他分享 >hdu 1175 连连看(DFS+剪枝)

hdu 1175 连连看(DFS+剪枝)

时间:2024-02-15 12:12:33浏览次数:24  
标签:剪枝 hdu 连连看 map int y1 && x2 y2

Problem - 1175 (hdu.edu.cn)

根据转弯次数和有没有找到答案来剪枝

#include<iostream>
#include<cstring>
using namespace std;
const int N=1010;
int n,m,q,x1,y1,x2,y2,flag;
int v[N][N],map[N][N];
int direction[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
#define check(x,y) (x>=1&&x<=n&&y>=1&&y<=m)
void DFS(int x,int y,int dir,int turn){
    if(turn>2 || flag) return ;
    if(turn==2 && x!=x2 && y!=y2) return ;
    if(x==x2 && y==y2 && turn<=2){
        flag=1;
        return ;
    }
    for(int i=0;i<4;i++){
        int nx=x+direction[i][0];
        int ny=y+direction[i][1];
        if(!check(nx,ny) || v[nx][ny]==1) continue;
        if(!map[nx][ny] || (nx==x2&&ny==y2)){
            v[nx][ny]=1;
            if(dir==-1||dir==i) DFS(nx,ny,i,turn);
            else DFS(nx,ny,i,turn+1);
            v[nx][ny]=0;
        }
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    while(cin>>n>>m && n && m){
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>map[i][j];
        cin>>q;
        while(q--){
            memset(v,0,sizeof(v));
            flag=0;
            cin>>x1>>y1>>x2>>y2;
            if(map[x1][y1]!=map[x2][y2] || map[x1][y1]==0){
                cout<<"NO"<<endl;
                continue;
            }
            DFS(x1,y1,-1,0);
            if(flag) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
    }
    
    return 0;
}

 

标签:剪枝,hdu,连连看,map,int,y1,&&,x2,y2
From: https://www.cnblogs.com/accbulb/p/18016118

相关文章

  • poj 2676 Sudoku(DFS+回溯+剪枝)
    2676--Sudoku(poj.org)#include<iostream>#include<cstring>usingnamespacestd;intt,row[10][10],col[10][10],grid[10][10],map[10][10];boolDFS(intr,intc){if(r==10)returntrue;boolflag=false;if(map[r][c]){if(c=......
  • Poj 2531 Network Saboteur(DFS+剪枝)
    2531--NetworkSaboteur(poj.org)#include<iostream>#include<cstring>usingnamespacestd;constintN=30;intC[N][N],n,ans;boolgroup[N];voidDFS(intnum,intsum){group[num]=true;inttmp=sum;for(inti=1;i<=n;i++){......
  • hdu 2553 N皇后问题(DFS模板)
    Problem-2553(hdu.edu.cn)#include<iostream>#include<cstring>usingnamespacestd;intn,tot=0;intcol[12];boolcheck(intc,intr){for(inti=0;i<r;i++){if(col[i]==c||(abs(col[i]-c)==abs(i-r)))returnfalse;}r......
  • hdu 4460 Friend Chains (图最长路的最小值)
    Problem-4460(hdu.edu.cn)写完提交答案错了,后面发现vis初始化的地方错了,以前BFS都只调用一次,看来我中毒太深。这个题更能体现BFS的特性,增加dis数组记录距离。#include<iostream>#include<queue>#include<cstring>#include<vector>#include<map>usingnamespacestd;c......
  • hdu 1312 Red and Black (BFS模板题)
    Problem-1312(hdu.edu.cn)BFS模板题#include<iostream>#include<queue>usingnamespacestd;typedeflonglongll;constintINF=0x3f3f3f3f;intwx,hy,num;charroom[25][25];#defineCHECK(x,y)(x>=0&&x<wx&&y>=0&&am......
  • hdu1240 Asteroids! (三维BFS)
    Problem-1240(hdu.edu.cn)三维的BFS,存在一个坐标点的变换,即输入的是(y,z,x),进行转换即可#include<iostream>#include<queue>#include<cstring>usingnamespacestd;intn,x1,y1,z1,x2,y2,z2,flag,vis[20][20][20];charroom[20][20][20];structnode{int......
  • GaussDB(for MySQL)剪枝功能,让查询性能提升70倍!
    作者,祝青平,华为云数据库内核高级工程师。擅长数据库优化器内核研发,9年数据库内核研发经验,参与多个TP以及AP数据库的研发工作。近日,华为云数据库社区下面有这样一条用户提问留言:请问,如何通过MySQL提升DISTINCT,尤其是多表连接下DISTINCT的查询效率?在回答这个问题之前,我们先了解一......
  • GaussDB(for MySQL)剪枝功能,让查询性能提升70倍!
    作者,祝青平,华为云数据库内核高级工程师。擅长数据库优化器内核研发,9年数据库内核研发经验,参与多个TP以及AP数据库的研发工作。近日,华为云数据库社区下面有这样一条用户提问留言:请问,如何通过MySQL提升DISTINCT,尤其是多表连接下DISTINCT的查询效率?在回答这个问题之前,我们先了解一下DI......
  • HDU 1175 连连看 (DFS)
    HDU1175连连看(DFS)题目:给出连连看棋盘,然后有q次询问,每次询问4个数(x1,y1,x2,y2),输出是否能不绕外面且转折不超过两次消除,输出YES/NOSampleInput34123400004321411341124113321243401430241000021124132300Sampl......
  • 不搜索,无问题。冗余、上下界剪枝
    公众号:编程驿站1.搜索算法本文和大家聊聊搜索算法,计算机解决问题的抽象流程是,先搜索,或完全搜索后得到答案,或边搜索边找答案。所以,对给定的数据集进行搜索是解决问题的前置条件。不搜索,无问题。搜索算法无非就是线性、二分、深度、广度搜索算法。其它的搜索算法的底层逻辑也是建......