ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)
//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)的更多相关文章
- ACM: FZU 2150 Fire Game - DFS+BFS+枝剪 或者 纯BFS+枝剪
FZU 2150 Fire Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)
这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...
- hdu 4460 第37届ACM/ICPC杭州赛区H题 STL+bfs
题意:一些小伙伴之间有朋友关系,比如a和b是朋友,b和c是朋友,a和c不是朋友,则a和c之间存在朋友链,且大小为2,给出一些关系,求出这些关系中最大的链是多少? 求最短路的最大距离 #include& ...
- Hdu 5452 Minimum Cut (2015 ACM/ICPC Asia Regional Shenyang Online) dfs + LCA
题目链接: Hdu 5452 Minimum Cut 题目描述: 有一棵生成树,有n个点,给出m-n+1条边,截断一条生成树上的边后,再截断至少多少条边才能使图不连通, 问截断总边数? 解题思路: 因 ...
- DFS+BFS(POJ3083)
题目链接:http://poj.org/problem?id=3083 解题报告:这个题目,搜最短路,没有什么问题.优先走左边,走右边,有很多说法,思路大概都相同,都是记录当前朝向,根据数学公式(i+ ...
- ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))
祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- jQuery之回调对象
1. jQuery 1.7 版本中新增的 jQuery.Callbacks() 函数返回一个全能的对象,此对象对管理回调列表提供了强大的方式.它能够增加.删除.触发.禁用回调函数. 2. callba ...
- 3sum问题的解决
其实一开始想错了,把这个问题想难了,导致没有思路,现在好了很多. 题目: Given an array S of n integers, are there elements a, b, c in S ...
- FastDFS 通过文件名获取文件信息
/** * 获取文件信息 * * param string group_name 文件所在的组名 * param string file_id 文件id(如: M00/09/BE/rBBZolgj6O ...
- Git中如何利用生成SSH个人公钥访问git仓库
Git中如何利用生成SSH个人公钥访问git仓库方法(这里以coding平台为例): 1. 获取 SSH 协议地址 在项目的代码页面点击 SSH 切换到 SSH 协议, 获得访问地址, 请使用这个地址 ...
- Django模版语言 格式化显示 后台datatime()时间
Django模版语言 格式化显示 后台datatime()时间 场景描述:
- 利用django创建一个投票网站(六)
建你的第一个 Django 项目, 第六部分 这一篇从第五部分(zh)结尾的地方继续讲起.再上一节中我们为网络投票程序编写了测试,而现在我们要为它加上样式和图片. 除了服务端生成的 HTML 以外,网 ...
- UICollectionViewCell 网格显示数据
using System; using System.Collections.Generic; using Foundation; using UIKit; namespace ddd { publi ...
- HTML之JS学习
提示篇 function fun(){ var is = confirm('选择对话框');/*确定取消对话框*/ if(is == true){ document.write('真');/*网页输出 ...
- Date类
Date类 构造方法: Date():根据当前的默认毫秒值创建对象 Date(long date):根据给定的默认毫秒值创建对象 成员方法: public long getTime():获取时间,以毫 ...
- 20145212&20145204信息安全系统实验四报告
一.实验内容与步骤 1.本次实验建立在掌握嵌入式开发平台使用方法和配置方法的基础上,要求使用windows xp,linux(red hat),arm三个系统(即NFS方式): 2.在linux系统中 ...