剪支迷宫法
来源:互联网 发布:婚纱摄影选择 知乎 编辑:程序博客网 时间:2024/04/27 22:09
其实对于这个方法我也一知半解,慢慢学吧,剪支法的理论百度一下,具体实现的话主要靠递归
#include<iostream>#include<cstring>#define N 10using namespace std;int n, m, t, end_i, end_j;bool visited[N][N], flag, ans;char map[N][N];int abs(int a, int b){ if (a<b) return b - a; else return a - b;}void DFS(int i, int j, int c)//运用递归的方法每一步都要进行判断{ if (flag) return; if (c>t) return;//c代表步数,当走过的步数大于时间t的时候就判断失败了 if (i<0 || i >= n || j<0 || j >= m) { return; } if (map[i][j] == 'D'&&c == t) { flag = ans = true; return; } int temp = abs(i - end_i) + abs(j - end_j); temp = t - temp - c; if (temp & 1) return;//奇偶剪枝 temp&1是判断奇偶,为偶数的话直接失败了 if (!visited[i - 1][j] && map[i - 1][j] != 'X') { visited[i - 1][j] = true; DFS(i - 1, j, c + 1); visited[i - 1][j] = false; } if (!visited[i + 1][j] && map[i + 1][j] != 'X') { visited[i + 1][j] = true; DFS(i + 1, j, c + 1); visited[i + 1][j] = false; } if (!visited[i][j - 1] && map[i][j - 1] != 'X') { visited[i][j - 1] = true; DFS(i, j - 1, c + 1); visited[i][j - 1] = false; } if (!visited[i][j + 1] && map[i][j + 1] != 'X') { visited[i][j + 1] = true; DFS(i, j + 1, c + 1); visited[i][j + 1] = false; }}int main(){ int i, j, x, y, k;//k障碍的个数 while (cin >> m >> n >> t && (m || n || t)) { memset(visited, false, sizeof(visited)); k = 0; for (i = 0; i<n; i++) { for (j = 0; j<m; j++) { cin >> map[i][j]; if (map[i][j] == 'S') { x = i; y = j; visited[i][j] = true; } if (map[i][j] == 'D') { end_i = i; end_j = j; } if (map[i][j] == 'X')k++; } } ans = flag = false; if (n*m - k - 1 >= t) DFS(x, y, 0); if (ans) cout << "YES" << endl; else cout << "NO" << endl; } return 0;}
0 0
- 剪支迷宫法
- poj 3278 bfs(剪支)
- 【poj 1416】Shredding Company DFS+剪支
- [poj 1699] Best Sequence dfs+剪支
- 走迷宫 回溯法
- 迷宫问题 回溯法
- 枚举法求迷宫
- 回溯法-迷宫问题
- 迷宫走法
- 迷宫走法
- 回溯法迷宫求解
- 回溯法求迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫?
- 迷宫
- 函数与关键字
- 多条件查询Hql
- JAVA中Collection和Collections的区别
- DataTable.Merge()方法
- 关键字【二】
- 剪支迷宫法
- iOS中URL编码那些事
- 解决hibernate 结果集对象转换json
- JAVA中的 JDK,JRE,JVM
- struts2 xml版
- android Fragment接收Jpush推送消息
- Hibernate连接Oracle数据库注解
- IAR集成开发环境建立Debug和Release版本
- Java的三种跳出控制语句