20200131今天是学习写bfs的我(新冠快走
Posted tabshh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20200131今天是学习写bfs的我(新冠快走相关的知识,希望对你有一定的参考价值。
自己完整的敲一遍代码还是和看不一样,发现挺多问题
1.标记放在入列之前比较好
2.多维空间迷宫问题(方向距离
3.G++测试MLE C++测试TLE是什么迷幻操作?
但是发现了问题是真的
以及 明明之前测试的时候发现了问题,还是忽略了它
Trick & Skill
1.清空队列:
(1).直接赋值
(2).逐个出列
(3).Swap
https://www.cnblogs.com/zhonghuasong/p/7524624.html
2.生成随机数
#include<ctime> int main(){ srand(time(NULL)); cout<<rand()%6; }
3.查错
===================================分割线===================================
今日代码
题目 POJ-2251
#include <iostream> #include <cstring> #include <queue> #include <math.h> #include <map> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; char a[35][35][35]; int vis[35][35][35]; int n,m,f; struct point{int l,x,y;}; typedef pair<point,int>p; int dx[]={0,0,-1,1}; int dy[]={1,-1,0,0}; point now,newo,ende; queue<p> qu; inline int read(){ int x=0,f=1;char c=getchar(); while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} return x*f; } inline void clean(){ while(!qu.empty())qu.pop(); memset(vis,0,sizeof(vis)); } int bfs(){ while(!qu.empty()){ now=qu.front().first; int dis=qu.front().second; qu.pop(); //cout<<"now: "<<now.l<<" "<<now.x<<" "<<now.y<<" "<<dis<<endl;//检验 if(now.l==ende.l && now.x==ende.x && now.y==ende.y){printf("Escaped in %d minute(s). ",dis);return 0;} if(now.l+1<=f && (a[now.l+1][now.x][now.y]==‘.‘ || a[now.l+1][now.x][now.y]==‘E‘) && !vis[now.l+1][now.x][now.y]){ now.l++; qu.push(p(now,dis+1));vis[now.l][now.x][now.y]=1; now.l--; } if(now.l-1>=0 && (a[now.l-1][now.x][now.y]==‘.‘ || a[now.l-1][now.x][now.y]==‘E‘) && !vis[now.l-1][now.x][now.y]){ now.l--; qu.push(p(now,dis+1));vis[now.l][now.x][now.y]=1; now.l++; } newo.l=now.l; for(int i=0;i<4;i++){ newo.x=now.x+dx[i]; //cout<<"new1 x: "<<newo.l<<" "<<newo.x<<" "<<newo.y<<" "<<a[newo.l][newo.x][newo.y]<<endl;//检验 if(newo.x<1 || newo.x>n)continue; newo.y=now.y+dy[i]; //cout<<"new2 y: "<<newo.l<<" "<<newo.x<<" "<<newo.y<<" "<<a[newo.l][newo.x][newo.y]<<endl;//检验 if(newo.y<1 || newo.y>m)continue; if(!vis[newo.l][newo.x][newo.y] && (a[newo.l][newo.x][newo.y]==‘.‘ || a[newo.l][newo.x][newo.y]==‘E‘)){ vis[newo.l][newo.x][newo.y]=1;qu.push(p(newo,dis+1));//coun++;cout<<coun<<endl; } } } cout<<"Trapped!"<<endl; } int main() { while(cin>>f>>n>>m && n){ char temp; clean(); getchar(); for(int j=1;j<=f;j++){ for(int i=1;i<=n;i++){ for(int t=1;t<=m;t++){ temp=getchar(); a[j][i][t]=temp; if(temp==‘S‘){now.l=j,now.x=i,now.y=t;} if(temp==‘E‘){ende.l=j,ende.x=i,ende.y=t;} } getchar(); } getchar(); } qu.push(p(now,0)); bfs(); } return 0; }
以上是关于20200131今天是学习写bfs的我(新冠快走的主要内容,如果未能解决你的问题,请参考以下文章