HDU 1010
来源:互联网 发布:开淘宝网流程 编辑:程序博客网 时间:2024/06/15 12:36
这个题教会我DFS不要写成for循环的形式
#include <cstdio>#include <cstdlib>#include <cstring>#include <queue>#include <iostream>using namespace std;const int MAX = 10;int m, n, t, sx, sy, flag, vis[MAX][MAX];int dx[] = {1, -1, 0, 0};int dy[] = {0, 0, 1, -1};char map[MAX][MAX];void DFS(int x, int y, int step){ if(step > t || flag) { return ; } if (map[x][y] == 'D' && step == t) { flag = 1; return; } if (map[x][y] == '.' || map[x][y] == 'S') { vis[x][y] = 1; //AC // if(x + 1 >= 1 && x + 1 <= m && y >= 1 && y <= n && vis[x + 1][y] ==0 ) // DFS(x + 1, y, step + 1); // if(x - 1 >= 1 && x - 1 <= m && y >= 1 && y <= n && vis[x - 1][y] ==0 ) // DFS(x - 1, y, step + 1); // if(x >= 1 && x <= m && y + 1 >= 1 && y + 1 <= n && vis[x][y + 1] ==0 ) // DFS(x, y + 1, step + 1); // if(x >= 1 && x <= m && y - 1 >= 1 && y - 1 <= n && vis[x][y - 1] ==0 ) // DFS(x, y - 1, step + 1); //TL for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if(nx >= 1 && nx <= m && ny >= 1 && ny <= n && vis[nx][ny] == 0) { DFS(nx, ny, step + 1); } } vis[x][y] = 0; }}int main(){ while (scanf("%d%d%d", &m, &n, &t), m + n + t) { getchar(); flag = 0; memset(vis, 0, sizeof(vis)); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { map[i][j] = getchar(); if (map[i][j] == 'S') { sx = i; sy = j; } } getchar(); } DFS(sx, sy, 0); printf(flag?"YES\n":"NO\n"); } return 0;}
0 0
- HDU 1010
- HDU 1010
- hdu 1010
- hdu 1010
- HDU 1010
- HDU 1010
- hdu 1010
- hdu-1010
- hdu 1010
- hdu 1010
- HDU 1010
- hdu 1010
- hdu 1010
- hdu-1010
- hdu-1010
- hdu 1010
- HDU 1010
- (1010)HDU
- java 定时任务
- 关于任小龙老师CSDN博客说明
- 有状态和无状态的Servlet
- Java中super的几种用法并与this的区别
- win8.1CPU使用率过高、卡顿、破音问题整理
- HDU 1010
- 黑马程序员——Java基础---练习题
- C# 类中变量初始化:字段初始值无法引用非静态字段、方法或属性
- Silverlight 3.0 不再包含 asp:silverlight 控件
- Mentor Graphics Exemplar.Leonardo.Spectrum.v2002a 1CD
- Oracle OCP认证考试题库解析052-2
- Linux系统Ubuntu下部署Tomcat
- mysqldb安装
- 二叉树中和为某一值的路径