题目链接:http://poj.org/problem?id=3083

解题报告:这个题目,搜最短路,没有什么问题。优先走左边,走右边,有很多说法,思路大概都相同,都是记录当前朝向,根据数学公式(i+j+3)%4计算下一个方向,但是小草发现有些博客里面有一点点小错误,就是在方向的表示上。

左边优先,上右下左分别为0、1、2、4。dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};

右边优先,左下右上分别为0、1、2、3。dir[4][2]={{0,-1},{1,0},{0,1},{-1,0}};

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue> using namespace std; #define MAXN 1000000007
#define judge(x,y) x>=0&&x<m&&y>=0&&y<n&&map[x][y]!='#'&&!vis[x][y] int dir1[][]= {{-,},{,},{,},{,-}}; ///左边优先
int dir2[][]= {{,-},{,},{,},{-,}}; ///右边优先 char map[][];
bool vis[][]; int m,n; struct node
{
int x,y;
int dist;
}; int step,START_I;
int left_step=,right_step=; int DFS(int x,int y,int I,int di[][])
{
if(map[x][y]=='E') return ;
int i,j;
for(j=; j<; j++)
{
i=(I+j+)%;
if(judge(x+di[i][],y+di[i][]))
{
step=DFS(x+di[i][],y+di[i][],i,di)+;
break;
}
}
return step;
} int bfs(int x,int y)
{
memset(vis,,sizeof(vis));
queue<node> q;
node u;
u.x=x;
u.y=y;
u.dist=;
vis[u.x][u.y]=true;
q.push(u);
while(!q.empty())
{
u=q.front();
int d=u.dist;
if(map[u.x][u.y]=='E')
return u.dist;
q.pop();
for(int i=; i<; i++)
{
node v;
v.x=u.x+dir1[i][];
v.y=u.y+dir1[i][];
if(judge(v.x,v.y))
{
vis[v.x][v.y]=true;
v.dist=d+;
q.push(v);
}
}
}
return ;
} int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
memset(map,,sizeof(map));
memset(vis,,sizeof(vis)); scanf("%d%d",&n,&m);
int sx,sy; ///开始的坐标 for(int i=; i<m; i++)
{
scanf("%s",map[i]);
for(int j=; j<n; j++)
if(map[i][j]=='S') sx=i,sy=j;
} ///一直向左走时,先找到出口的方向
for(int i=; i<; i++)
if(judge(sx+dir1[i][],sy+dir1[i][])) ///从这个点搜四边,是否有出口,并且记录下来出口,上右下左分别为0,1,2,3,
START_I=i; ///(i+j+3)%4
step=;
left_step=DFS(sx,sy,START_I,dir1); ///向右
for(int i=; i<; i++)
if(judge(sx+dir2[i][],sy+dir2[i][])) ///从这个点搜四边,是否有出口,并且记录下来出口,左下右上分别为0,1,2,3,
START_I=i; ///(i+j+3)%4
step=;
memset(vis,,sizeof(vis));
right_step=DFS(sx,sy,START_I,dir2);
printf("%d %d %d\n",left_step,right_step,bfs(sx,sy)+);
}
return ;
}

DFS+BFS(POJ3083)的更多相关文章

  1. ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)

    //POJ3083 //DFS求靠左墙(右墙)走的路径长+BFS求最短路 //Time:0Ms Memory:716K #include<iostream> #include<cst ...

  2. DFS/BFS+思维 HDOJ 5325 Crazy Bobo

    题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...

  3. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

    [题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...

  4. ID(dfs+bfs)-hdu-4127-Flood-it!

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4127 题目意思: 给n*n的方格,每个格子有一种颜色(0~5),每次可以选择一种颜色,使得和左上角相 ...

  5. [LeetCode] 130. Surrounded Regions_Medium tag: DFS/BFS

    Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A reg ...

  6. HDU 4771 (DFS+BFS)

    Problem Description Harry Potter has some precious. For example, his invisible robe, his wand and hi ...

  7. DFS/BFS视频讲解

    视频链接:https://www.bilibili.com/video/av12019553?share_medium=android&share_source=qq&bbid=XZ7 ...

  8. POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE

    POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...

  9. [LeetCode]695. 岛屿的最大面积(DFS/BFS)、200. 岛屿数量(DFS/BFS待做/并差集待做)

    695. 岛屿的最大面积 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被 ...

随机推荐

  1. js 实现继承的几种方式

    //js中实现继承的几种方式 //实现继承首先要有一个父类,先创造一个动物的父类 function Animal(name){ this.name = name; this.shoot = funct ...

  2. 在新项目下使用rbc权限

    例子说明: 8 个步骤 1. 拷贝rabc这个app到项目中 2. 把迁移过来的rbac下migrations记录删除 3. 把rabc注册到项目中 4. 创建数据库迁移 5. 注册admin,录入数 ...

  3. 在vue2.x中安装sass并配置

    在vue中安装sass先检查系统中有没有安装sass,在命令行中输入 sass -v 表示sass在电脑中已有,否者可以参考我这篇博客安装Sass遇到的坑 一.先安装sass cmd打开命令行,到项目 ...

  4. android Window(一)从setConetView说起

    Activity的源码 首先从setContentView这里调用的mWindow的 setConetView() private Window mWindow; public void setCon ...

  5. 搜索提示(search suggest)文献阅读

    Learning to Personalize Query Auto-Completion 样本 正例用用户的sug点击,其余是负例 特征 用户历史特征: query历史频次,候选和用户历史输入的ng ...

  6. SourceTree 关于 .gitignore使用/下载

    # =============== # # Unity generated # # =============== # Temp/ Obj/ UnityGenerated/ Library/ Asse ...

  7. [转]jQuery调用ASPX返回json

    本文转自:http://www.cnblogs.com/fire-phoenix/archive/2009/11/13/1614146.html 本文介绍如何在ASP.NET(ASP.NET/AJAX ...

  8. Homebrew 配置

    使用ruby脚本安装完成homebrew之后, 需要配置三个源以及添加一些环境变量 1. export HOMEBREW_NO_AUTO_UPDATE=true # 不自动检查更新 2. cd $(b ...

  9. HDU 4359——Easy Tree DP?——————【dp+组合计数】

    Easy Tree DP? Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  10. Visual Studio 2017 安装失败,你们有这样的问题吗?怎么解决

    由于发生一个或多个包故障,产品未能安装列出的工作负荷和组件. 工作负荷不完整 使用 JavaScript 的移动开发 (Microsoft.VisualStudio.Workload.WebCross ...