//POJ3083
//DFS求靠左墙(右墙)走的路径长+BFS求最短路
//Time:0Ms Memory:716K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std; #define MAX 45
#define INRANGE(x,y) (x >= 0 && x < n && y >=0 && y < m) struct Point{
int x, y, d;
Point(int xx,int yy,int dd):x(xx), y(yy), d(dd){}
}; int n,m;
int sx,sy;
char mize[MAX][MAX];
bool vis[MAX][MAX];
int mov[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; //东南西北 int dfs(int x, int y, int f, int c)
{
if(mize[x][y] == 'E') return 1;
int px = x + mov[(f+c)%4][0], py = y + mov[(f+c)%4][1]; //左侧(右侧)
int fx = x + mov[f][0], fy = y + mov[f][1]; //前侧
if(mize[px][py] == '.' || mize[px][py] == 'E')
{
f = (f+c)%4; //向左转(向右转)
fx = x + mov[f][0], fy = y + mov[f][1];
}
while(mize[fx][fy] == '#')
{
f = (f+4-c)%4; //向右转(向左转)
fx = x + mov[f][0], fy = y + mov[f][1];
}
return 1 + dfs(fx,fy,f,c);
} int bfs(int x, int y)
{
memset(vis,false, sizeof(vis));
queue<Point> q;
q.push(Point(x,y,1));
vis[x][y] = true;
while(!q.empty()){
Point cur = q.front();
q.pop();
for(int i =0; i < 4;i++)
{
int tx = cur.x + mov[i][0];
int ty = cur.y + mov[i][1];
if(INRANGE(tx,ty) && mize[tx][ty] != '#' && !vis[tx][ty])
{
if(mize[tx][ty] == 'E') return cur.d+1;
q.push(Point(tx,ty, cur.d+1));
vis[tx][ty] = true;
}
}
}
return 0;
} int main()
{
//freopen("in.txt","r",stdin); int T;
scanf("%d", &T);
while(T--){
memset(vis, false, sizeof(vis));
scanf("%d%d", &m,&n);
for(int i = 0; i < n;i++)
{
scanf("%s", mize[i]);
for(int j = 0; j < m; j++)
if(mize[i][j] == 'S') sx = i, sy = j;
}
int f = 0;
for(; f < 4; f++)
{
int fx = sx + mov[f][0], fy = sy + mov[f][1];
if(INRANGE(fx,fy) && mize[fx][fy] == '.' || mize[fx][fy] == 'E')
break;
} printf("%d %d %d\n", dfs(sx, sy, f, 3), dfs(sx, sy, f, 1), bfs(sx,sy));
}
return 0;
}

ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)的更多相关文章

  1. ACM: FZU 2150 Fire Game - DFS+BFS+枝剪 或者 纯BFS+枝剪

    FZU 2150 Fire Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  2. ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)

    这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...

  3. hdu 4460 第37届ACM/ICPC杭州赛区H题 STL+bfs

    题意:一些小伙伴之间有朋友关系,比如a和b是朋友,b和c是朋友,a和c不是朋友,则a和c之间存在朋友链,且大小为2,给出一些关系,求出这些关系中最大的链是多少? 求最短路的最大距离 #include& ...

  4. Hdu 5452 Minimum Cut (2015 ACM/ICPC Asia Regional Shenyang Online) dfs + LCA

    题目链接: Hdu 5452 Minimum Cut 题目描述: 有一棵生成树,有n个点,给出m-n+1条边,截断一条生成树上的边后,再截断至少多少条边才能使图不连通, 问截断总边数? 解题思路: 因 ...

  5. DFS+BFS(POJ3083)

    题目链接:http://poj.org/problem?id=3083 解题报告:这个题目,搜最短路,没有什么问题.优先走左边,走右边,有很多说法,思路大概都相同,都是记录当前朝向,根据数学公式(i+ ...

  6. ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))

    祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...

  7. HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  8. HDU 5876 Sparse Graph 【补图最短路 BFS】(2016 ACM/ICPC Asia Regional Dalian Online)

    Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)To ...

  9. hduoj 4707 Pet 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4707 Pet Time Limit: 4000/2000 MS (Java/Others)    Memory ...

随机推荐

  1. MongoDBDao 工具类(包含分页取数据)

    mongdb工具类 package e16wifi.statistic.com.mongodb; import java.util.ArrayList; import java.util.List; ...

  2. Sprng ecache

    Ehcache是一种广泛使用的开源java分布式缓存,它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点. 主要的 ...

  3. 两种适用于中小量数据的mysql数据备份

    近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...

  4. PHP curl报错“Problem (2) in the Chunked-Encoded data”解决方案

    $s = curl_init(); curl_setopt($s, CURLOPT_POST, true); curl_setopt($s, CURLOPT_POSTFIELDS, $queryStr ...

  5. java 枚举的简单应用。

    枚举,就是保存着原始的<key,value> 在代码中会经常用到.为了不坑自己,记录一下笔记 package com.fortunedr.common.constant; public e ...

  6. Summary - SNMP Tutorial

    30.13 Summary Network management protocols allow a manager to monitor and control routers and hosts. ...

  7. 一个简单的 Web 服务器 [未完成]

    最近学习C++,linux和网络编程,想做个小(mini)项目.  就去搜索引擎, 开源中国, Sourceforge上找http server的项目. 好吧,也去了知乎.    知乎上程序员氛围好, ...

  8. PHP header函数设置http报文头(设置头部域)

    PHP HTTP 简介: HTTP 函数允许您在其他输出被发送之前,对由 Web 服务器发送到浏览器的信息进行操作. PHP 5 HTTP 函数:header()     向客户端发送原始的 HTTP ...

  9. Mac下安装ionic和cordova,并生成iOS项目

    为了开发HTML5,除了最新使用React Native等之外,目前首选的为稳定的ionic+Angularjs来开发iOS和android. Ionic(ionicframework一款接近原生的H ...

  10. SQL语句判断数据库、表、字段是否存在

    from master..sysdatabases where name='TestDB')    print 'TestDB存在'else    print 'TestDB不存在' --判断表[Te ...