第一次用剪枝
来源:互联网 发布:金税通网络电子发票 编辑:程序博客网 时间:2024/05/01 23:22
HDOJ 1010
#include <cstdio>#include <cmath>using namespace std;int n, m, t, sx, sy, ex, ey;char maze[8][8];int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};bool escape = false;int least_distance(int x, int y){ return abs(x - ex) + abs(y - ey);}void DFS(int x, int y, int step){ if (x < 1 || y < 1 || x > n || y > m) return; if (x==ex && y==ey && step==t) { escape = true; } if (escape) return; int temp = (t - step) - least_distance(x, y); if (temp < 0 || temp % 2 == 1) return; for (int i = 0; i < 4; ++i) { int xt = x + dir[i][0]; int yt = y + dir[i][1]; if (maze[xt][yt] != 'X') { maze[xt][yt] = 'X'; DFS(xt, yt, step + 1); maze[xt][yt] = '.'; } }}int main(){ // freopen("in.txt", "r", stdin); while(scanf("%d %d %d", &n, &m, &t) && (n + m + t)) { getchar(); //printf("%d %d %d\n", n, m, t); escape = false; int wall = 0; sx = sy = ex = ey = 0; for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { scanf("%c", &maze[i][j]); //printf("%c", maze[i][j]); if(maze[i][j] == 'S') { sx = i; sy = j; } if(maze[i][j] == 'D') { ex = i; ey = j; } if(maze[i][j] == 'X') { wall++; } } getchar(); // printf("\n"); } if(m * n - wall <= t) { printf("NO\n"); continue; } maze[sx][sy] = 'X'; DFS(sx, sy, 0); if(escape) printf("YES\n"); else printf("NO\n"); } return 0;}
- 第一次用剪枝
- 剪枝
- 第一次用
- 第一次用
- 第一次用
- 第一次用
- 第一次用
- 第一次用
- 第一次用
- 第一次用
- 第一次用
- HDU 剪枝剪枝......
- 第一次用blog
- 第一次用CSDN BLOG
- 第一次用BLOG!
- 第一次用BLOG~~~
- 第一次用这个
- 第一次用blog,呵呵!
- 此文胜过你听三年的培训课,最少省十万
- webView字体放大
- 一个简单的matlab图形界面程序GUI
- 上篇日本人经营之道 二该强硬时决不手软
- DNS解析过程详解
- 第一次用剪枝
- url字符串编码乱码问题
- Android调用系统自带的文件管理器进行文件选择
- Ubuntu下为Firefox安装Adobe Flash Player
- jenkins update center
- 能够按页号提取word文档文本内容的小程序,由C#实现
- kmp算法详解
- hdu4571 背包
- Calling fork from Multiple Thread Environment