题目链接: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. mapreduce求平均数

    1. 现有某电商关于商品点击情况的数据文件,表名为goods_click,包含两个字段(商品分类,商品点击次数),分隔符“     ”,由于数据很大,所以为了方便统计我们只截取它的一部分数据,内容如下 ...

  2. my.资质

    换算到每1点魔力初始,1点魔力等同于22点法资,等于0.00235点成长. 气血=等级*体力资质*0.002895+体力属性点*成长*7 魔法=等级*法力资质*0.002085+法力属性点*成长*5 ...

  3. mysql忘记密码时,重新修改密码

    错误描述 1045 access denied for user 'root'@'localhost' using password yes 1045 access denied for user ' ...

  4. javascript 例外处理Try{}catch(e){}

    程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(exception handlers).如果例外处理代码设计得周全,那么最终呈现给用户的就将是一个友好的界面.否则,就会 ...

  5. 性能测试工具LoadRunner16-LR之Controller 负载运行时设置

  6. 性能测试工具Jmeter04-脚本录制

    Jmeter脚本录制:不推荐使用,这里就不介绍了 Badboy脚本录制 下载地址:http://www.badboy.com.au Badboy是一个强大的工具,旨在帮助测试和开发复杂的动态应用.Ba ...

  7. [转]Tetris(俄罗斯方块) in jQuery/JavaScript!

    本文转自:http://pwwang.com/2009/10/25/tetris-in-jquery-javascript/ All in jQuery/JavaScript + HTML! Demo ...

  8. bootstrap-datetimepicker:基于twitter bootstrap的日期/时间选择控件

    bootstrap-datetimepicker是一个基于twitter bootstrap的简单日期/时间选择控件. <!DOCTYPE HTML> <html> <h ...

  9. go语言初始化内部结构体3中方式

    package main import ( "fmt" ) type User struct { Id int Name string Age int } type Manger ...

  10. 连接MySql的时候报1130的错误解决办法

    部署了一个 数据库采用Mysql的程序,sqlyog连接非本地的Mysql服务器的数据库,居然无法连接很奇怪,报1130错误,ERROR 1130: Host 192.168.3.100 is not ...