博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces793 B. Igor and his way to work (dfs)
阅读量:4588 次
发布时间:2019-06-09

本文共 1333 字,大约阅读时间需要 4 分钟。

题目链接: (dfs)

求从起点到终点转方向不超过两次是否有解,,好水啊,感觉自己代码好搓。。

#include
#include
#include
#include
#include
#include
#include
#include
#define CLR(a,b) memset((a),(b),sizeof((a)))using namespace std;typedef long long ll;const int N = 1005;int n, m;int sx, sy, ex, ey;int flag;char s[N][N];int vis[N][N][5][5];void dfs(int x, int y, int d, int turn) { //上下:d = 1,左右:d = 2 if(turn > 2 || vis[x][y][d][turn]) return; if(x == ex && y == ey) { flag = true; return; } vis[x][y][d][turn] = 1; if(x-1 >= 0 && s[x-1][y] != '*' && !vis[x-1][y][1][turn+(d==2)]) { dfs(x-1, y, 1, turn + (d==2)); } if(x+1 < n && s[x+1][y] != '*' && !vis[x+1][y][1][turn+(d==2)]) { dfs(x+1, y, 1, turn + (d==2)); } if(y-1 >= 0 && s[x][y-1] != '*' && !vis[x][y-1][2][turn+(d==1)]) { dfs(x, y-1, 2, turn + (d==1)); } if(y+1 < m && s[x][y+1] != '*' && !vis[x][y+1][2][turn+(d==1)]) { dfs(x, y+1, 2, turn + (d==1)); }}int main() { int i, j; scanf("%d%d ", &n, &m); for(i = 0; i < n; ++i) { scanf("%s", s[i]); for(j = 0; j < m; ++j) { if(s[i][j] == 'S') {sx = i; sy = j;} else if(s[i][j] == 'T') {ex = i; ey = j;} } } flag = 0; CLR(vis, 0); dfs(sx, sy, 0, 0); if(flag) puts("YES"); else puts("NO"); return 0;}

转载于:https://www.cnblogs.com/GraceSkyer/p/6778021.html

你可能感兴趣的文章
管理机--Jumpserver由docker搭建
查看>>
bzoj2212 Tree Rotations 线段树合并+动态开点
查看>>
SAP CRM 通过调试观察CL_CRM_BOL_ENTITY中的数据
查看>>
2016NOI冬令营day5
查看>>
JavaScript正则表达式-字符
查看>>
php 不等待返回的实现方法(异步调用)
查看>>
Oracle成长点点滴滴(2)— 权限管理
查看>>
Android 离线语音用法(讯飞语音)
查看>>
offsetof(s,m)解析
查看>>
JAVA遇见HTML——JSP篇:JavaBeans
查看>>
mariadb(四)连接查询,视图,事物,索引,外键
查看>>
【翻译】Kinect Studio是? 三月 SDK Update的新机能
查看>>
[BZOJ2654]tree(二分+Kruskal)
查看>>
枚举类型和 struct类型
查看>>
解决“在证书存储区中找不到清单签名证书”
查看>>
SPOJ.1812.LCS2(后缀自动机)
查看>>
HDU.2899.Strange fuction(牛顿迭代)
查看>>
BZOJ.3238.[AHOI2013]差异(后缀自动机 树形DP/后缀数组 单调栈)
查看>>
10.23 正睿停课训练 Day7
查看>>
音频相关 ALSA ffmpeg ffplay 命令用法 g7xx
查看>>