题意:给你一个迷宫。 先输出当左转优先的时候走的路程长度,再输出当右转优先时走的路程长度,最后输出从起点到终点的最短路程长度。

嗯嗯 奴哥活跃气氛的题。随便写了写。。

此题 知道了思路以后就是水题了。。。。

再随便缩缩行也就不到40行 (网上的题解好多200+的。。)

发现pair是个很坑的角儿。我一不小心就写挂了,重点是本机测试所有数据的输出结果都对。查不出来哪儿错的,,找了5min才找出来。



pair < int,int> *p=&q.front();然后就p->first p->second

改成

pair < int,int> p=q.front() p.first p.second

就AC了。(哎 讲语法课的时候浪过去了)

p是取的q.front()的地址,然后它pop出去了,相当于取了个随时都有可能变的地址,这虽然能水过本机的测试,但评测机就水不过去了。。。

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n,m,sx,sy,ex,ey,ansl,ansr,flag=0,Q,cases,vis[55][55];
char a[55][55],lx[]={-1,0,1,0},ly[]={0,1,0,-1},rx[]={1,0,-1,0},ry[]={0,1,0,-1};
inline void dfs(int x,int y,int f,int t,char *xx,char *yy){
if(Q)return;
if(a[x][y]=='E'){
if(flag%2){ansr=t,flag++,Q=1;return;}
else {ansl=t,flag++,Q=1;return;}
}
for(int i=0;i<=3;i++)
if(a[x+xx[(f+i)%4]][y+yy[(f+i)%4]]=='.'||a[x+xx[(f+i)%4]][y+yy[(f+i)%4]]=='E')
dfs(x+xx[(f+i)%4],y+yy[(f+i)%4],(f+i+3)%4,t+1,xx,yy);
}
int bfs(){
queue<pair<int,int> >q;
q.push(make_pair(sx,sy));
while(1){
pair<int,int>p=q.front();q.pop();
if(a[p.first][p.second]=='E')return vis[p.first][p.second];
for(int i=0;i<=3;i++)
if(!vis[p.first+lx[i]][p.second+ly[i]]&&(a[p.first+lx[i]][p.second+ly[i]]=='.'||a[p.first+lx[i]][p.second+ly[i]]=='E'))
vis[p.first+lx[i]][p.second+ly[i]]=vis[p.first][p.second]+1,q.push(make_pair(p.first+lx[i],p.second+ly[i]));
}
}
int main(){
scanf("%d",&cases);
while(cases--){
memset(vis,0,sizeof(vis));
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]=='S')sx=i,sy=j;
}
Q=0;dfs(sx,sy,0,1,lx,ly);
Q=0;dfs(sx,sy,0,1,rx,ry);
printf("%d %d %d\n",ansl,ansr,bfs()+1);
}
}

POJ 3083 BFS+DFS 40行的更多相关文章

  1. POJ 3083 Bfs+Dfs

    注意求最短路的时候用Bfs. #include<iostream> #include<stdio.h> using namespace std; int w,h,ex,ey,s ...

  2. 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, ...

  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. poj 3083 dfs,bfs

    传送门    Children of the Candy Corn Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I6 ...

  5. POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)

    思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...

  6. 搜索入门_简单搜索bfs dfs大杂烩

    dfs题大杂烩 棋盘问题  POJ - 1321 和经典的八皇后问题一样.  给你一个棋盘,只有#区域可以放棋子,同时同一行和同一列只能有一个棋子. 问你放k个棋子有多少种方案. 很明显,这是搜索题. ...

  7. Collect More Jewels(hdu1044)(BFS+DFS)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  8. 邻结矩阵的建立和 BFS,DFS;;

    邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...

  9. Python人脸识别最佳教材典范,40行代码搭建人脸识别系统!

    Face Id是一款高端的人脸解锁软件,官方称:"在一百万张脸中识别出你的脸."百度.谷歌.腾讯等各大企业都花费数亿来鞭策人工智能的崛起,而实际的人脸识别技术是否有那么神奇? 绿帽 ...

随机推荐

  1. MFC CAD控制权问题

    begineditorcommand(); 隐藏对话框  把控制权交给CAD completeeditorcommand(); 完成交互返回到应用程序 canceleditorcommand CAD被 ...

  2. PHP 设计模式--序言

    面向对象是PHP5之后增加的功能,是PHP走向现代语言的一个标志. 在过程式设计时代,PHP以学习成本低.入门快的特点赢得很多WEB开发者的青睐,但同时也限制了PHP的发展. 借鉴Java和C++之后 ...

  3. CAD插入非等比例的图块

    主要用到函数说明: _DMxDrawX::InsertBlock 向控件数据库中插入一个图块,不用它插入匿名块.详细说明如下: 参数 说明 BSTR pszDwgFileName 图块定义的dwg 文 ...

  4. javascript中 (function(){})();如何理解?

    javascript中 (function(){})();如何理解? javascript中: (function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环 ...

  5. DOCKER - POD操作

    强制删除 Terminating 的pod kubectl delete  -n <namespace> <pod podname> --grace-period=0 --fo ...

  6. join 和 left join 和 right join的区别?

    join等价于 inner join 是内连接 ,返回两个表都有的符合条件的行. left join 是左连接,返回坐表中所有的行以及右表中符合条件的行. right join右连接,是返回右表中所有 ...

  7. c#用控制台程序安装启动停止卸载服务

    第一步:新建控制台项目  第二步:添加服务 第三步:右键新建完成的服务项 点击 在start 和stop事件中分别写上   第四步 编写代码 双击打开 using System; using Syst ...

  8. redis下载安装配置教程

    参考 https://www.cnblogs.com/taostaryu/p/9481749.html 上面做完后, 打开客户端 $ redis-cli 以上命令将打开以下终端: redis 127. ...

  9. SQL上门

    学习这个 介绍:SQL 是用于访问和处理数据库的标准的计算机语言.结构化化查询语言! SQL可以分为两大部分:数据操作语言(DML)和数据定义语言(DDL) 数据操作语言:select.update. ...

  10. SVG格式图片转成HTML中SVG的Path路径

    AI图标制作完成之后,保存的svg文件包含许多AI的信息,如果要在HTML中使用,我们需要在svg文件中提取/修改信息,重新保存. 1.在AI中已经完成图标,要保存SVG文件,点击“文件(File)” ...