博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nyoj 1129 Salvation
阅读量:5782 次
发布时间:2019-06-18

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

题目链接:

题目分析:感觉题目说的不是多么的清晰,看了别人的分析觉得,也就是说在一个方向不能拐四次弯;大于四次就要return了;方向可以自己定义,方便使用就好

AC代码:

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 int n , m; 8 char map[110][110]; 9 int ex,ey,sx,sy,flag ;10 int dir[4][2] = {
1,0,0,-1,-1,0,0,1};11 int vis[110][110];12 bool judge(int x,int y)13 {14 if(x<1 || x>n || y<1 || y>m || map[x][y] == '#')15 return false;16 return true;17 }18 void dfs(int D,int x,int y)19 {20 int xx,yy;21 22 if(x == ex && y == ey)23 {24 flag =1;25 return ;26 }27 int sd = D-1;28 for(int i =0; i<4; i++)29 {30 D = (sd+i+8)%4;31 xx = x + dir[D][0];32 yy = y + dir[D][1];33 //printf("dd: %d %d\n",xx,yy);34 if(judge(xx,yy))35 {36 if(vis[xx][yy] == 4) return ;37 vis[xx][yy]++;38 dfs(D,xx,yy);39 return ;//这个可不能忘40 }41 }42 return ;43 }44 int main()45 {46 char s;47 while(scanf("%d %d",&n,&m)!=EOF)48 {49 memset(vis,0,sizeof(vis));50 for(int i = 1; i<=n; i++)51 for(int j =1;j<=m; j++)52 {53 scanf(" %c",&map[i][j]);54 if(map[i][j] == 'T') sx =i,sy =j;55 if(map[i][j] == 'X') ex =i,ey =j;56 }57 scanf(" %c",&s);58 vis[sx][sy] = 1;59 int dr;60 if(s == 'S') dr = 0;61 else if(s == 'W') dr = 1;62 else if(s == 'N') dr = 2;63 else dr = 3;64 flag = 0;65 dfs(dr,sx,sy);66 if(flag)67 printf("YES\n");68 else printf("NO\n");69 }70 return 0;71 }

 

转载地址:http://rscyx.baihongyu.com/

你可能感兴趣的文章
android代码生成jar包并混淆
查看>>
一个不错的vue项目
查看>>
屏蔽指定IP访问网站
查看>>
python学习 第一天
查看>>
根据毫秒数计算出当前的“年/月/日/时/分/秒/星期”并不是件容易的事
查看>>
python的图形模块PIL小记
查看>>
shell变量子串
查看>>
iOS的主要框架介绍 (转载)
查看>>
react报错this.setState is not a function
查看>>
poj 1183
查看>>
从根本解决跨域(nginx部署解决方案)
查看>>
javascript实现的一个信息提示的小功能/
查看>>
Centos7.x:开机启动服务的配置和管理
查看>>
HTML5 浏览器返回按钮/手机返回按钮事件监听
查看>>
xss
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>
JS获取服务器时间并且计算距离当前指定时间差的函数
查看>>
华为硬件工程师笔试题
查看>>
jquery居中窗口-页面加载直接居中
查看>>
cd及目录快速切换
查看>>