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

本文共 1961 字,大约阅读时间需要 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 }

 

转载于:https://www.cnblogs.com/lovychen/p/4424557.html

你可能感兴趣的文章
【RMAN】使用RMAN的 Compressed Backupsets备份压缩技术 (转载)
查看>>
博弈论之威佐夫博弈(转载)
查看>>
Hive学习之四 《Hive分区表场景案例应用案例,企业日志加载》 详解
查看>>
Python爬虫学习:二、爬虫的初步尝试
查看>>
安卓工作室 android studio 谷歌账号 登录
查看>>
使用diff或者vimdiff比较远程文件(夹)与本地文件夹
查看>>
事件委托
查看>>
PHP
查看>>
第四周
查看>>
Pandas学习笔记,如何重命名DataFrame中的一列
查看>>
Visual C++的DLL
查看>>
解决adb shell input text 中文输入,unicode转utf-8
查看>>
linux常用命令,不断学习和更新中...
查看>>
Csharp 基础笔记知识点整理
查看>>
深入学习之mysql(三)单表操作
查看>>
web请求
查看>>
正则基础之——贪婪与非贪婪模式
查看>>
数据结构【基础知识点总结】
查看>>
Android Studio中getter和setter模版配置
查看>>
hdu 4655 Cut Pieces(想法题)
查看>>