hdu 1010
2015-07-21 15:45
309 查看
嗯....这题我交了27次QAQ
剪枝剪枝剪枝,重要的事情说三遍!奇偶剪枝是很重要的然后各种初始化和return也一定要写,回溯的时候记得还原修改为'X'的路径。
说到底还是我太弱了....
剪枝剪枝剪枝,重要的事情说三遍!奇偶剪枝是很重要的然后各种初始化和return也一定要写,回溯的时候记得还原修改为'X'的路径。
说到底还是我太弱了....
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int n,m,t,di,dj; bool ok; int dr[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; char a[10][10]; void dfs(int x, int y, int cnt) { if (x==di && y==dj && cnt==t) { ok = true; return; } if (ok) return; if (x<1 || y<1 || x>n || y>m) { return; } int temp = abs(t-cnt) - abs(x-di) -abs(y-dj); if (temp<0 || temp%2!=0) // jioujianzhi { return; } int bi,bj; bi = bj = 0; for (int i=0; i<4; i++) { bi = x + dr[i][0]; bj = y + dr[i][1]; if (a[bi][bj] != 'X') { a[bi][bj] = 'X'; dfs(bi,bj,cnt+1); a[bi][bj] = '.'; } } return; } int main() { while (cin >> n >> m >> t) { int w = 0; memset(a,'X',sizeof(a)); int si,sj; si = sj = 0; if (n==0 && m==0 && t==0) { break; } for (int i=1; i<=n; i++) { scanf("%s",&a[i][1]); getchar(); for (int j=1; j<=m; j++) { if (a[i][j] == 'S') { si = i; sj = j; } if (a[i][j] == 'D') { di = i; dj = j; } if (a[i][j] == 'X') { w++; } } } if (n*m-w <= t) //jianzhi { printf("NO\n"); continue; } a[si][sj] = 'X'; dfs(si,sj,0); if (ok) printf("YES\n"); else printf("NO\n"); ok = false; } return 0; }
相关文章推荐
- PopupWindow用法
- WinForm获取当前路径汇总
- [LeetCode]Remove Nth Node From End of List
- 老工程师对研发工作的感悟
- 探索 ConcurrentHashMap 高并发性的实现机制
- iOS8 Core Location (授权。。。室内定位。。。访问监控。。。)
- 【C#】文件解压ZIP
- 嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
- poj 2255
- Apache+PHP+MYSQL部署
- HDU 2818 Building Block(带权并查集)
- ECMAScript 5严格模式
- SQL注入原理以及如何避免注入
- stl泛型算法
- java 静态构造函数
- 【转】adb uninstall卸载apk文件说明
- 2012年下半年软件评测师(下午)试题分析与解答
- 常用的链接
- Android selector标签下的几种状态解读
- Spring事物配置的五种方式