DFS小练习
来源:互联网 发布:希腊存款担保移民 知乎 编辑:程序博客网 时间:2024/05/16 15:40
#include<stdio.h>#include<iostream>#include<string.h>#include<math.h>#include<algorithm>#include<queue>#include<set>#include<iterator>#include<map>using namespace std;typedef unsigned long long ll;int used[110][110];char maze[110][110];int n, m, k, fork, ans;int sx, sy;int ex, ey;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};bool legal(int x, int y){ if(used[x][y] == 1 || maze[x][y] == 'X') return false; return x >= 0 && x < n && y >= 0 && y < m;}void dfs(int x, int y, int fork){ //cout << " (" << x << ", " << y << ") -> "; if(maze[x][y] == '*'){ ans = fork; return; } int dir = 0; for(int i = 0; i < 4; i++){ int nx = x + dx[i]; int ny = y + dy[i]; if(legal(nx, ny)) dir++; } for(int i = 0; i < 4; i++){ int nx = x + dx[i]; int ny = y + dy[i]; if(legal(nx, ny)){ used[nx][ny] = 1; if(dir > 1) dfs(nx, ny, fork + 1); else dfs(nx, ny, fork); used[nx][ny] = 0; } }}int main(){ int t; scanf("%d", &t); while(t--){ memset(used, 0, sizeof(used)); scanf("%d%d", &n, &m); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ scanf(" %c", &maze[i][j]); if(maze[i][j] == 'M'){ sx = i; sy = j; } if(maze[i][j] == '*'){ ex = i; ey = j; } } } scanf("%d", &k); fork = 0; ans = 0; used[sx][sy] = 1; dfs(sx, sy, fork); //cout << "ans: " << ans << endl; if(ans == k) printf("Impressed\n"); else printf("Oops!\n"); } return 0;}
阅读全文
0 0
- DFS小练习
- dfs练习
- dfs练习
- dfs 练习
- C/C++编程小练习 数独(DFS算法实现)
- poj 1088-小白算法练习 滑雪 dfs记忆化
- dfs入门练习一
- dfs算法练习
- DFS练习-HDU1010
- poj 1011-小白算法练习 Sticks 从最简单的做起 dfs+剪枝
- 小白算法练习 NYOJ 吝啬的国度 dfs+邻接表
- 小白算法练习 hdu courses 1083 匈牙利算法 dfs 邻接矩阵 vector模拟邻接表
- 小白算法练习 二分图染色 dfs 选择四种状态表示
- 小练习
- 小练习
- 小练习
- 小练习
- 小练习
- 将查出来的多个DataTable 合并成一个
- document.referrer已经可以用于统计搜索来源
- 腿部训练
- 如何在利用Navicte for Mysql 快速导入数据
- spark mllib 入门学习(一)--聚类算法
- DFS小练习
- class类的总结
- ueditor 解决视频回显 src链接丢失问题
- TTS语音播报程序部署与配置
- Linux下切换python版本
- 看完让你彻底搞懂Websocket原理
- java基础-网页部分
- 微信IM聊天信息下拉加载数据
- 编译Android下可执行命令的FFmpeg