hdu1175(DFS)
来源:互联网 发布:淘宝口碑客服电话 编辑:程序博客网 时间:2024/05/16 05:07
题目链接:连连看
就连连看啊,线的转折次数不超过两次
DFS,注意剪枝,当转的次数=2,如果不能直线走过,就回溯
#include <iostream>#include <stdio.h>#include <memory.h>using namespace std;const int maxn=1005;int g[maxn][maxn];bool vis[maxn][maxn],tag;int n,m,sx,sy,ex,ey;int dx[]={-1,1,0,0};int dy[]={0,0,-1,1};bool check(int x,int y){ if(x<1||y<1||x>n||y>m)return false; return true;}void dfs(int x,int y,int dir,int num){ if(tag)return; if(num>2)return; if(num==2&&x-ex!=0&&y-ey!=0) return;//剪枝 if(x==ex&&y==ey){ tag=true; return; } if(g[x][y])return; for(int i=0;i<4;i++){ int nx=x+dx[i]; int ny=y+dy[i]; if(check(nx,ny)&&!vis[nx][ny]){ vis[nx][ny]=true; if(dir!=i)dfs(nx,ny,i,num+1); else dfs(nx,ny,i,num); vis[nx][ny]=false; if(tag)return; } }}int main(){ //freopen("in.txt","r",stdin); int q; while(scanf("%d%d",&n,&m)!=EOF&&(n+m)>0){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&g[i][j]); } } scanf("%d",&q); while(q--){ tag=false; memset(vis,0,sizeof(vis)); scanf("%d %d %d %d",&sx,&sy,&ex,&ey); if(g[sx][sy]==g[ex][ey]&&g[sx][sy]){ vis[sx][sy]=true; for(int i=0;i<4;i++){ int nx=sx+dx[i]; int ny=sy+dy[i]; if(check(nx,ny)&&!vis[nx][ny]){ vis[nx][ny]=true; dfs(nx,ny,i,0); vis[nx][ny]=false; if(tag)break; } } } if(tag)printf("YES\n"); else printf("NO\n"); } } return 0;}
0 0
- hdu1175(DFS)
- HDU1175(DFS)
- hdu1175 连连看(DFS+剪枝)
- HDU1175 连连看 DFS
- HDU1175:连连看(DFS)
- HDU1175:连连看(DFS)
- hdu1175 连连看(DFS)
- HDU1175 连连看(DFS)
- hdu1175 连连看 --DFS
- hdu1175 连连看dfs
- hdu1175——DFS
- hdu1175(dfs+剪枝)
- 【hdu1175】连连看——dfs(剪枝)
- 搜索专题(BFS&&DFS)HDU1175-连连看
- HDU1175 DFS 转弯问题思路
- hdu1175 连连看 (DFS+剪枝)
- hdu1175连连看 (超强的 剪枝+DFS)
- HDU1175:连连看(DFS+拐弯次数)
- POJ 3237 Tree(树链剖分)
- 【Java Tip】(三) Object类wait()与nofity()
- Linux初学备忘
- 方程的解数(dfs优化)
- 154. Find Minimum in Rotated Sorted Array II--Array--LeetCode--C++
- hdu1175(DFS)
- python使用requests包爬取Pixiv图片--关注画师的所有作品
- Tribon的网络版(TriWeb)上线啦
- 测试一下
- 轻松理解CRC差错检测算法(A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS)一
- dijstra 模板
- java泛型
- 51nod 1406 与查询
- Currying