博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ3083 Children of the Candy Corn(搜索)
阅读量:5167 次
发布时间:2019-06-13

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

题意:

先沿着左边的墙从 S 一直走,求到达 E 的步数。

再沿着右边的墙从 S 一直走,求到达 E 的步数。

最后求最短路。

 

分析:

最短路好办,关键是沿着墙走不太好想。

但只要弄懂如何转,这题就容易了。

单就沿着左走看一下:

当前方向     检索顺序

     ↑ :      ← ↑ → ↓

    → :        ↑ → ↓ ← 

     ↓ :      → ↓ ← ↑ 

    ← :        ↓ ← ↑ → 

如此,规律很明显,假设数组存放方向为 ← ↑ → ↓, 如果当前方向为 ↑, 就从 ← 开始依次遍历,找到可以走的,如果 ← 可以走,就不用再看 ↑ 了。

在DFS时,加一个参数,用来保存当前的方向。

 

#include 
#include
#include
#include
#include
using namespace std;const int maxn = 100+10;int dx[] = {
0, -1, 0, 1};int dy[] = {-1, 0, 1, 0};int dl[][2] = {
{
0, -1}, {-1, 0}, {
0, 1}, {
1, 0}};int dr[][2] = {
{
0, 1}, {-1, 0}, {
0, -1}, {
1, 0}};int sx, sy, ex, ey, n, m;char G[maxn][maxn];struct Pos { int x, y, s;};int dfs(int x, int y, int d, int step, int dir[][2]) { for(int i=0; i<4; i++) { int j = ((d-1+4)%4+i)%4; int nx = x+dir[j][0]; int ny = y+dir[j][1]; if(nx == ex && ny == ey) return step+1; if(nx < 0 || ny < 0 || nx > n || ny > m) continue; if(G[nx][ny] == '#') continue; return dfs(nx, ny, j, step+1, dir); }}int BFS(int sx, int sy) { bool vis[maxn][maxn]; memset(vis, false, sizeof(vis)); queue
Q; Q.push((Pos){sx, sy, 1}); vis[sx][sy] = true; while(!Q.empty()) { Pos p = Q.front(); Q.pop(); if(p.x == ex && p.y == ey) return p.s; Pos np; for(int d=0; d<4; d++) { np.x = p.x + dx[d]; np.y = p.y + dy[d]; np.s = p.s + 1; if(np.x < 0 || np.x > n || np.y < 0 || np.y > m) continue; if(vis[np.x][np.y]) continue; if(G[np.x][np.y] != '#') { vis[np.x][np.y] = true; Q.push(np); } } } return -1;}int main() { int T, d1, d2; //freopen("my.txt", "r", stdin); scanf("%d", &T); while(T--) { scanf("%d%d", &m, &n); for(int i=0; i

 

转载于:https://www.cnblogs.com/tanhehe/p/3154483.html

你可能感兴趣的文章
ural 1133. Fibonacci Sequence
查看>>
压缩图片
查看>>
SDK登录cognos
查看>>
内存知识整理。
查看>>
redis—Spring中redis缓存的简单使用
查看>>
[VC]关于ocx打包为cab的使用
查看>>
面向对象高级编程(1)-使用__slots__
查看>>
软件测试-HW03
查看>>
linux第1天 fork exec 守护进程
查看>>
Ajax原理学习
查看>>
最新最潮的24段魔尺立体几何玩法(2016版)
查看>>
C# 3.0 LINQ的准备工作
查看>>
CodeForces - 449D Jzzhu and Numbers
查看>>
mysql批量插入更新操作
查看>>
静态代码审查工具FxCop插件开发(c#)
查看>>
创建代码仓库
查看>>
理解裸机部署过程ironic
查看>>
Django 组件-ModelForm
查看>>
zabbix 二 zabbix agent 客户端
查看>>
大数据分析中,有哪些常见的大数据分析模型?
查看>>