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

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

题目连接:http://codevs.cn/problem/1026/

思路:这道题网站吧它归为了广搜  可我广搜学的真的不怎么样 然后我就用深搜写的 感觉深搜也是很简单的

我们从起点开始用一个顺序然后一直找一直找直到碰到障碍或者碰到小镇的墙壁就可以换方向了  如果无路可走那么就返回

最终要的一点是 千万别忘记查重 如果不查重一定超时用一个三维数组f来表示这个点后面能不能行

下面看代码:代码中有许多解释

#include
#include
char map[60][60]; //记录地图的char order[1005]; //记录方向的int m, n, t;bool f[60][60][1005]; //查重的char diction[8];void dfs(int a,int b,int cur){ if(cur == t) { map[a][b] = '*'; return ; } if(f[a][b][cur] != 0) return ; f[a][b][cur] = 1; //这个地方千万别忘写了查重用的 没有这个一定超时 if(order[cur] == 'N') { while((a - 1) >= 0&&map[a - 1][b] != 'X') { a--; dfs(a,b,cur + 1); } } else if(order[cur] == 'S') { while((a + 1) < n&&(map[a + 1][b] != 'X')) { a++; dfs(a,b,cur + 1); } } else if(order[cur] == 'W') { while((b - 1) >= 0&&map[a][b - 1] != 'X') { b--; dfs(a,b,cur + 1); } } else if(order[cur] == 'E') { while((b + 1) < m&&map[a][b + 1] != 'X') { b++; dfs(a,b,cur + 1); } }}int main(){ int i,j; scanf("%d%d",&n,&m); for(i = 0;i < n;i++) { scanf("%s",map[i]); } scanf("%d",&t); for(j = 0;j < t;j++) { scanf("%s",diction); order[j] = diction[0]; } for(i = 0;i < n;i++) { for(j = 0;j < m;j++) { if(map[i][j] == '*') break; } if(j != m) break; } map[i][j] = '.'; //这个地方也是非常重要 起点一定要化成.不然也会wrong answer memset(f, 0, sizeof(f)); dfs(i,j,0); for(i = 0;i < n;i++) { for(j = 0;j < m;j++) { printf("%c",map[i][j]); } printf("\n"); } return 0;}

 

转载于:https://www.cnblogs.com/zhanyage110/p/4394906.html

你可能感兴趣的文章
绿鹰网马盾
查看>>
MySQL数据库
查看>>
6.10 dokcer(五)导出和导入 删除
查看>>
TeXworks代码补全功能
查看>>
java+jsp+mysql网页制作总结(1)
查看>>
获取当前操作的IFrame 对象的方法
查看>>
年月日下拉选择三级联动(闰年判断),时间获取方法总结,特殊:获取当前月天数...
查看>>
Tallest Cow(POJ3263)
查看>>
POJ—Building a Space Station
查看>>
杭电oj Problem-1013 Digital Roots
查看>>
CRM 2013 切换显示语言
查看>>
Codeforces Round #544 (Div. 3) C. Balanced Team
查看>>
UML-对象图
查看>>
【leetcode】1037. Valid Boomerang
查看>>
一起学Android之Layout
查看>>
PHP网页计时工具——SESSION问题
查看>>
PHP 真正多线程的使用
查看>>
ip黑白名单防火墙frdev的原理与实现
查看>>
ajax全接触
查看>>
ps查看内存占用排序
查看>>