博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1035 Robot Motion(dfs + 模拟)
阅读量:5325 次
发布时间:2019-06-14

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

嗯...

 

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035

 

这道题比较简单,但自己一直被卡,原因就是在读入mp这张字符图的时候用了scanf被卡...

 

注意初始化和dfs边界:如果超出图或者曾经被标记过则输出

 

AC代码:

1 #include
2 #include
3 #include
4 5 using namespace std; 6 7 char mp[1005][1005]; 8 int k, a, b, c, flag[1005][1005]; 9 10 inline void dfs(int x, int y){11 if(x <= 0 || y <= 0 || x > a || y > b){12 printf("%d step(s) to exit\n", k);13 return;14 }15 if(flag[x][y] != 0){16 printf("%d step(s) before a loop of %d step(s)\n", flag[x][y] - 1, k - flag[x][y] + 1);//k - (flag[x][y] - 1)17 return;18 }19 if(mp[x][y] == 'E'){20 k++;21 flag[x][y] = k;22 dfs(x, y + 1);23 }24 else if(mp[x][y] == 'W'){25 k++;26 flag[x][y] = k;27 dfs(x, y - 1);28 }29 else if(mp[x][y] == 'N'){30 k++;31 flag[x][y] = k;32 dfs(x - 1, y);33 }34 else if(mp[x][y] == 'S'){35 k++;36 flag[x][y] = k;37 dfs(x + 1, y);38 }39 }40 41 int main(){42 while(scanf("%d%d%d", &a, &b, &c) != EOF && a + b){43 memset(flag, 0, sizeof(flag));44 for(int i = 1; i <= a; i++)45 for(int j = 1; j <= b; j++)46 cin >> mp[i][j];//scanf会被卡 47 k = 0;48 dfs(1, c);49 }50 return 0;51 }
AC代码

 

转载于:https://www.cnblogs.com/New-ljx/p/11406188.html

你可能感兴趣的文章
Spring模块
查看>>
P1478 陶陶摘苹果(升级版)洛谷 (c++)(贪心、排序)
查看>>
iis配置问题
查看>>
hdu 5417 Victor and Machine
查看>>
人物-李彦宏:李彦宏
查看>>
.NETFramework:ConfigurationManager
查看>>
JSP-Runoob:JSP 点击量统计
查看>>
package-org.springframework.ui-interface:Model.class
查看>>
Java-MyBatis-杂项: MyBatis 中 in 的用法2
查看>>
WiFi direct 的相关特点
查看>>
数据结构-线段树
查看>>
HUD2647 Reward_反向建图拓扑排序
查看>>
BZOJ 3343 教主的魔法 分块
查看>>
白发长哪里是肝不好
查看>>
QT Graphics-View图元组使用
查看>>
利用反射调用方法时,处理ref,out参数需要注意的问题(转)
查看>>
【模板】一堆数论模板 [数论]
查看>>
webug4.0安装
查看>>
状态保存
查看>>
【模板】关于c++的代码模板
查看>>