POJ 3083 BFS+DFS 40行
2024-10-01 03:19:44
题意:给你一个迷宫。 先输出当左转优先的时候走的路程长度,再输出当右转优先时走的路程长度,最后输出从起点到终点的最短路程长度。
嗯嗯 奴哥活跃气氛的题。随便写了写。。
此题 知道了思路以后就是水题了。。。。
再随便缩缩行也就不到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);
}
}
最新文章
- [Android]解决ClickableSpan中点击后ListView中item的长按冲突的问题
- Linux&;UNIX上卸载GoldenGate的方法
- AIZU 0005
- poj 1182 食物链(关系并查集)
- hdu 1385 Minimum Transport Cost
- BZOJ1628: [Usaco2007 Demo]City skyline
- 设置ubuntu Android sdk环境变量
- centos无法载入 mcrypt 扩展,<;br />;请检查 PHP 配置,经过各种尝试,终于找到了解决办法
- @SuppressWarnings抑制警告
- 在tomcat中布置项目的介绍(一)
- Java数据持久层框架 MyBatis之API学习八(Java API详解)
- 15.1 打开文件时的提示(不是dos格式)去掉头文件
- MySQL中 DECIMAL FLOAT DOUBLE的区别
- Google 是如何收集我们的个人数据的
- 12C -- ORA-12850: 无法在所有指定实例上分配从属进程: 需要 2, 已分配 1
- Leetcode 131
- TCP/IP协议(5):传输层之TCP
- 6、JUC--同步锁Lock
- root用户Linux 环境变量的配置解决(-bash: jps: command not found)有关问题
- 非常详尽的 Shiro 架构解析
热门文章
- 解决hibernate删除时的异常 deleted object would be re-saved by cascade (remove deleted object from associa
- STL源码分析之内存池
- Django settings.py的一些配置
- mysql登录出现1045错误
- NLTK学习笔记(六):利用机器学习进行文本分类
- hdu2012 素数判定【C++】
- js两个整数之间求和
- nyoj_283_对称排序_201312051155
- 洛谷—— P2733 家的范围 Home on the Range
- 利用keepalive和timeout来推断死连接