POJ 3083 Bfs+Dfs
注意求最短路的时候用Bfs。
#include<iostream>
#include<stdio.h>
using namespace std;
int w,h,ex,ey,sx,sy;
int map[100][100],can[100][100];
struct vid{ int x,y,step;
}queue[5000];
int zan[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int dirl[4][2]={0,-1,-1,0,0,1,1,0},dirr[4][2]={0,1,1,0,0,-1,-1,0};
int dfsr(int dstep,int x,int y,int di )
{
int i,temp1,temp2; for(i=0;i<4;i++)
{
temp1=x+dirr[i][0];
temp2=y+dirr[i][1]; if((temp1>=0)&&(temp1<h)&&(temp2>=0)&&(temp2<w))
{
if(dfsr(dstep+1,x+dirr[i][0],y+dirr[i][1],i))
return dstep;
else
return 0;
} }
return 0; }
int dfsl(int dstep,int x,int y,int di )
{ int i,temp1,temp2; for(i=0;i<4;i++)
{
temp1=x+dirl[i][0];
temp2=y+dirl[i][1]; if((temp1>=0)&&(temp1<h)&&(temp2>=0)&&(temp2<w))
{
if(dfsl(dstep+1,temp1,temp2,i))
return dstep;
else
return 0;
} } return 0;
}
int bfs()
{ if (sx == ex && sy == ey)
{ return 1;
}
int t,ww,x,y,t1,t2;
t=ww=1;
queue[t].x=sx;
queue[t].y=sy;
queue[t].step=0;
can[sx][sy]=1;
while(t<=ww&&!can[ex][ey])
{ x=queue[t].x;
y=queue[t].y;
for(int i=0;i<4;i++)
if((!map[x+zan[i][0]][y+zan[i][1]])&&(!can[x+zan[i][0]][y+zan[i][1]]))
{ t1=x+zan[i][0];
t2=y+zan[i][1];
if(t1>=0&&(t1<h)&&(t2>=0)&&(t2<w)&&(!map[t1][t2])&&(!can[t1][t2]))
{ queue[++ww].x=t1;
queue[ww].y=t2;
queue[ww].step=queue[t].step+1;
can[t1][t2]=1;
}
}
t++;
}
return queue[ww].step+1;
}
int main ()
{
int t;
char c;
scanf("%d",&t);
getchar();
while(t--)
{ scanf("%d%d",&w,&h);
getchar();
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
can[i][j]=0;
c=getchar();
if(c=='#')
map[i][j]=1;
else if(c=='.')
map[i][j]=0;
else if(c=='S')
{
map[i][j]=0;
sx=i,sy=j;
}
else
if(c=='E')
{
map[i][j]=0;
ex=i;ey=j;
}
}
getchar();
}
// init();
// dfsr();
// printf("%d ",bfs());
printf("%d %d %d\n",dfsl(0,sx,sy,0)+1,dfsr(0,sx,sy,0)+1,bfs());
} return 0;
}
POJ 3083 Bfs+Dfs的更多相关文章
- POJ 3083 BFS+DFS 40行
题意:给你一个迷宫. 先输出当左转优先的时候走的路程长度,再输出当右转优先时走的路程长度,最后输出从起点到终点的最短路程长度. 嗯嗯 奴哥活跃气氛的题.随便写了写.. 此题 知道了思路以后就是水题了. ...
- Q - 迷宫问题 POJ - 3984(BFS / DFS + 记录路径)
Q - 迷宫问题 POJ - 3984 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, ...
- POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...
- poj 3083 dfs,bfs
传送门 Children of the Candy Corn Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I6 ...
- POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)
思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...
- 搜索入门_简单搜索bfs dfs大杂烩
dfs题大杂烩 棋盘问题 POJ - 1321 和经典的八皇后问题一样. 给你一个棋盘,只有#区域可以放棋子,同时同一行和同一列只能有一个棋子. 问你放k个棋子有多少种方案. 很明显,这是搜索题. ...
- 邻结矩阵的建立和 BFS,DFS;;
邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...
- POJ.3172 Scales (DFS)
POJ.3172 Scales (DFS) 题意分析 一开始没看数据范围,上来直接01背包写的.RE后看数据范围吓死了.然后写了个2^1000的DFS,妥妥的T. 后来想到了预处理前缀和的方法.细节以 ...
- Collect More Jewels(hdu1044)(BFS+DFS)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
随机推荐
- 20145335郝昊《网络对抗技术》Exp6 信息搜集技术
20145335郝昊<网络对抗技术>Exp6 信息搜集技术 实验内容 本次实验的目标是掌握信息搜集的最基础技能.具体有(1)各种搜索技巧的应用(2)DNS IP注册信息的查询 (3)基本的 ...
- Java JDK8 学习笔记 1-3章
第一章 Java平台概论 1.了解Java的前世今生,Java SE.Java EE.JavaME三大平台.其中Java SE主要由四部分JVM.JRE.JDK与Java语言,JDK包含JRE,JRE ...
- Python3基础 list 推导式 生成与已知列表等长度+元素为0的列表
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- C简介与环境配置
C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的.C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现. 在 1978 年,布莱 ...
- Linux驱动模块的Makefile分析【转】
本文转载自:http://blog.chinaunix.net/uid-29307109-id-3993784.html 1. 获取内核版本 当设备驱动需要同时支持不同版本内核时,在编译阶段,内核模块 ...
- ubuntu下桌面假死处理方法(非重启)
一.背景 2018/05/22,就在这一天,进入ubuntu的桌面后随便点击任何位置均无法响应,此时又不想重启,遂出此文 二.解决方案 2.1 关掉Xorg进程 2.1.1按下ctrl+alt+F1进 ...
- ubuntu16.04下内核模块解析
一.环境如下: 1.1内核版本: jello@jello:~$ uname -a Linux jello 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19: ...
- Sql Server 创建表添加说明
http://bbs.csdn.net/topics/340184487 在此感谢 提供参考 CREATE TABLE ToPayFee ( Id INT IDENTITY(1,1) PRIMA ...
- C#学习笔记(十三):继承
继承 object是引用类型 public:最高权限,公开的 Protected:外部不可以访问 Internal:类的默认访问是什么作用域 Private:类成员默认 基类实例:可以通过base ...
- js清除未知定时器的方法
js清除未知定时器的方法 在需要有实时性更新数据的项目中,我们经常会用到很多定时器,我们可能需要一个可以一次性清除所有定时器的方法,并且不通过指定ID一个一个去清除,以下提供两种解决方案: 1.定 ...