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

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

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

再随便缩缩行也就不到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);
}
}

最新文章

  1. [Android]解决ClickableSpan中点击后ListView中item的长按冲突的问题
  2. Linux&amp;UNIX上卸载GoldenGate的方法
  3. AIZU 0005
  4. poj 1182 食物链(关系并查集)
  5. hdu 1385 Minimum Transport Cost
  6. BZOJ1628: [Usaco2007 Demo]City skyline
  7. 设置ubuntu Android sdk环境变量
  8. centos无法载入 mcrypt 扩展,&lt;br /&gt;请检查 PHP 配置,经过各种尝试,终于找到了解决办法
  9. @SuppressWarnings抑制警告
  10. 在tomcat中布置项目的介绍(一)
  11. Java数据持久层框架 MyBatis之API学习八(Java API详解)
  12. 15.1 打开文件时的提示(不是dos格式)去掉头文件
  13. MySQL中 DECIMAL FLOAT DOUBLE的区别
  14. Google 是如何收集我们的个人数据的
  15. 12C -- ORA-12850: 无法在所有指定实例上分配从属进程: 需要 2, 已分配 1
  16. Leetcode 131
  17. TCP/IP协议(5):传输层之TCP
  18. 6、JUC--同步锁Lock
  19. root用户Linux 环境变量的配置解决(-bash: jps: command not found)有关问题
  20. 非常详尽的 Shiro 架构解析

热门文章

  1. 解决hibernate删除时的异常 deleted object would be re-saved by cascade (remove deleted object from associa
  2. STL源码分析之内存池
  3. Django settings.py的一些配置
  4. mysql登录出现1045错误
  5. NLTK学习笔记(六):利用机器学习进行文本分类
  6. hdu2012 素数判定【C++】
  7. js两个整数之间求和
  8. nyoj_283_对称排序_201312051155
  9. 洛谷—— P2733 家的范围 Home on the Range
  10. 利用keepalive和timeout来推断死连接