HDU ACM 1175 连连看 DFS
来源:互联网 发布:算法导论17.1 2 编辑:程序博客网 时间:2024/06/06 02:33
感觉这代码写的好乱。
#include<iostream>using namespace std;int map[1001][1001],m,n,ok,zhuan,fi1,fj1,path,fi2,fj2;int si,sj,flag[1001][1001];void dfs(int i1,int j1,int i2,int j2);int main(){ int q,x1,y1,x2,y2; while(scanf("%d%d",&n,&m)==2 &&(n||m)) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&map[i][j]); } scanf("%d",&q); for(i=0;i<q;i++) { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); ok=0; zhuan=0; fi1=x1; fj1=y1; path=0; si=x1; sj=y1; memset(flag,0,sizeof(flag)); if(map[si][sj] && map[x2][y2]) { dfs(x1,y1,x2,y2); } if(ok) { printf("YES\n"); } else { printf("NO\n"); } } } return 0;}void dfs(int i1,int j1,int i2,int j2){ int dir[4][2]={{-1,0},{0,1},{0,-1},{1,0}},i; int fi3,fj3,ping,l1,l2; if(i1<1||j1<1||i1>n||j1>m) return ; if(i1==i2 && j1==j2 && map[si][sj]==map[i2][j2] && map[i2][j2] && zhuan<=2) { ok=1; return ; } for(i=0;i<4;i++) { path++; if(path>=2) { fi3=i1+dir[i][0]; fj3=j1+dir[i][1]; if(fi3>=1&&fi3<=n&&fj3>=1&&fj3<=m) { ping=(fi2-fi1)*(fj3-fj2)-(fj2-fj1)*(fi3-fi2); if(ping) { zhuan++; } l1=fi1; l2=fj1; fi1=fi2; fj1=fj2; fi2=fi3; fj2=fj3; if(zhuan<=2 && ((map[fi3][fj3]==map[i2][j2]&& i2==fi3&&j2==fj3) || !map[fi3][fj3])) { if(!flag[fi3][fj3]) { if(zhuan==2) { if(i2==fi3 || j2==fj3) { flag[i1][j1]=1; dfs(fi3,fj3,i2,j2); if(ok) return ; flag[i1][j1]=0; } } else { flag[i1][j1]=1; dfs(fi3,fj3,i2,j2); if(ok) return ; flag[i1][j1]=0; } } } if(ping) { zhuan--; } fi2=fi1; fj2=fj1; fi1=l1; fj1=l2; } path--; } else if(path==1) { fi2=i1+dir[i][0]; fj2=j1+dir[i][1]; if(fi2>=1&&fi2<=n&&fj2>=1&&fj2<=m) { if(!map[fi2][fj2] || (map[fi2][fj2]==map[i2][j2]&& i2==fi2&&j2==fj2)) { if(!flag[fi2][fj2]) { flag[i1][j1]=1; dfs(fi2,fj2,i2,j2); if(ok) return ; flag[i1][j1]=0; } } } path--; } }}
0 0
- HDU ACM 1175 连连看 DFS
- hdu 1175 DFS连连看
- hdu 1175 连连看 DFS
- hdu 1175 连连看 dfs
- HDU-1175 连连看 DFS
- 【DFS】hdu 1175 连连看
- 【dfs】hdu 1175 连连看
- hdu 1175 连连看 dfs
- dfs-HDU 1175连连看
- HDU 1175 连连看 DFS
- HDU 1175 连连看 (DFS)
- HDU 1175 连连看(DFS)
- HDU-1175 连连看(DFS)
- HDU ( DFS) 连连看
- hdu 1175 连连看 (DFS)
- hdu 1175 [连连看] dfs搜索
- 【DFS】hdu 1175 连连看 stack
- HDU 1175 连连看 (搜索 DFS)
- 日期类-Java
- 融云 Android sdk kit 头像昵称更新机制
- LightOJ1008---Fibsieve`s Fantabulous Birthday (规律)
- ubuntu创建启动器
- 开始刷leetcode day32: Rotate List
- HDU ACM 1175 连连看 DFS
- EnumMap的用法
- hdoj1091(3)
- 链接(2)——动态链接汇编探秘
- 解析Handler,MessageQueue,Message,Looper之间的关系
- Unable to resolve address ' ' service ' ': Name or service not known
- MySql 与C# 乱码问题处理
- iframe自适应(去除滚动条)
- 读stalendp文章的笔记之【Shader实例分析(一)-Wave】