题意:给一个w*h的迷宫,其中矩阵里面 S是起点,E是终点,“#”不可走,“.”可走,而且,S、E都只会在边界并且,不会在角落,例如(0,0),输出的话,每组数据就输出三个整数,第一个整数,指的是,以S的起点为当前所对着的路径为正方向,如果正方向的左边能走的话,就走左边,不能就按正方向走,不行的话就就往回走,如此反复,记录步数,并输出,第二个整数也是如此,只不过搜的方向改成正方向的右边。第三个就是最短路,

分析:前两个用DFS求出,最短路直接BFS解决,,

单就沿着左走看一下:

当前方向       检索顺序

Sx=n-1   ↑ :      ← ↑ → ↓

Sy=0    → :        ↑ → ↓ ←

Sx=0    ↓ :      → ↓ ← ↑

Sy=n-1   ← :        ↓ ← ↑ →

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

这个题的麻烦处理就在于怎么按什么样的顺序dfs

在网上搜题解感觉这种想法特别好,不繁琐,代码还简洁

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue> using namespace std; int dx[]={,-,,};
int dy[]={-,,,}; int dl[][]={{,-},{-,},{,},{,}};
int dr[][]={{,},{-,},{,-},{,}}; int sx,sy,ex,ey,n,m;
char G[][]; struct node
{
int x,y,s;
}; int dfs(int x,int y,int d,int step,int dir[][])
{
for(int i=;i<;++i)
{
int j=((d-+)%+i)%;
int nx=x+dir[j][];
int ny=y+dir[j][];
if(nx==ex&&ny==ey)
return step+;
if(nx<||ny<||nx>n||ny>m||G[nx][ny]=='#')
continue;
return dfs(nx,ny,j,step+,dir);
}
} int BFS(int sx,int sy)
{
bool vis[][];
memset(vis, false, sizeof(vis));
queue<node>q;
node a;
a.x=sx,a.y=sy,a.s=;
q.push(a);
vis[sx][sy]=true;
while(!q.empty())
{
node p=q.front();
q.pop();
if(p.x==ex&&p.y==ey)
return p.s;
node p1;
for(int i=;i<;++i) {
p1.x=p.x+dx[i];
p1.y=p.y+dy[i];
p1.s=p.s+;
if(p1.x<||p1.x>n||p1.y<||p1.y>m||vis[p1.x][p1.y])
continue;
if(G[p1.x][p1.y]!='#')
{
vis[p1.x][p1.y]=true;
q.push(p1);
}
}
}
return -;
} int main()
{
int T,d1,d2;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
for(int i=;i<n;++i)
{
scanf("%s",G[i]);
for(int j=;j<m;++j)
{
if(G[i][j]=='S')
{
sx=i;
sy=j;
}
else if(G[i][j]=='E')
{
ex=i;
ey=j;
}
}
}
if(sx==)
{
d1=;
d2=;
}
else if(sx==n-)
{
d1=;
d2=;
}
else if(sy==)
{
d1=;
d2=;
}
else if(sy==m-)
{
d1=;
d2=;
}
printf("%d ",dfs(sx,sy,d1,,dl));
printf("%d ",dfs(sx,sy,d2,,dr));
printf("%d\n",BFS(sx,sy));
}
return ;
}

POJ3083 Children of the Candy Corn(Bfs + Dfs)的更多相关文章

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

    Description The cornfield maze is a popular Halloween treat. Visitors are shown the entrance and mus ...

  2. POJ3083 Children of the Candy Corn(搜索)

    题目链接. 题意: 先沿着左边的墙从 S 一直走,求到达 E 的步数. 再沿着右边的墙从 S 一直走,求到达 E 的步数. 最后求最短路. 分析: 最短路好办,关键是沿着墙走不太好想. 但只要弄懂如何 ...

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

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

  4. POJ3083——Children of the Candy Corn(DFS+BFS)

    Children of the Candy Corn DescriptionThe cornfield maze is a popular Halloween treat. Visitors are ...

  5. poj3083 Children of the Candy Corn BFS&&DFS

    Children of the Candy Corn Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11215   Acce ...

  6. POJ 3083:Children of the Candy Corn(DFS+BFS)

    Children of the Candy Corn Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9311 Accepted: ...

  7. poj 3083 Children of the Candy Corn(DFS+BFS)

    做了1天,总是各种错误,很无语 最后还是参考大神的方法 题目:http://poj.org/problem?id=3083 题意:从s到e找分别按照左侧优先和右侧优先的最短路径,和实际的最短路径 DF ...

  8. poj3083 Children of the Candy Corn 深搜+广搜

    这道题有深搜和广搜.深搜还有要求,靠左或靠右.下面以靠左为例,可以把简单分为上北,下南,左西,右东四个方向.向东就是横坐标i不变,纵坐标j加1(i与j其实就是下标).其他方向也可以这样确定.通过上一步 ...

  9. poj 3083 Children of the Candy Corn (广搜,模拟,简单)

    题目 靠墙走用 模拟,我写的是靠左走,因为靠右走相当于 靠左走从终点走到起点. 最短路径 用bfs. #define _CRT_SECURE_NO_WARNINGS #include<stdio ...

随机推荐

  1. 【ASP.NET MVC 学习笔记】- 14 HtmlHlper的扩展方法

    本文参考:http://www.cnblogs.com/willick/p/3428413.html 1.在 MVC 中用于生成 Html 元素的辅助类是 System.Web.Mvc 命名空间下的  ...

  2. Python Nose框架编写测试用例方法

    1. 关于Nose nose项目是于2005年发布的,也就是 py.test改名后的一年.它是由 Jason Pellerin 编写的,支持与 py.test 相同的测试习惯做法,但是这个包更容易安装 ...

  3. Callback 与 Promise 间的桥梁 —— promisify

    作者:晃晃 本文原创,转载请注明作者及出处 Promise 自问世以来,得到了大量的应用,简直是 javascript 中的神器.它很好地解决了异步方法的回调地狱.提供了我们在异步方法中使用 retu ...

  4. 高性能前端框架React详解

      前  言 React 是一个用于构建[用户界面]的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图). React 起源于 Facebo ...

  5. CodeForces - 556C Case of Matryoshkas

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  6. Again Stone Game

    Alice and Bob are playing a stone game. Initially there are n piles of stones and each pile contains ...

  7. Solitaire

    Solitaire Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. JavaNIO阻塞IO

    package com.java.NIO; import java.io.IOException; import java.net.InetSocketAddress; import java.nio ...

  9. display:none和visibility:hidden区别

    <!-- display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: --> <!-- display:none 不为被隐藏的对象保留其物理空 ...

  10. Input类型是checkbox时checked属性获取

    记录一下checkbox 的 checked 属性的获取办法,以备忘记: 假如你的一个HTML页中有这么一段代码: <input name="chbRem" id=" ...