UVA532 POJ2251 ZOJ1940 Dungeon Master
2018-03-20 23:04
387 查看
做了这个题我把dfs跟bfs又温习了一遍,明白了什么时候该用dfs什么时候改用bfs,详情请戳这里,下面附上dfs跟bfs代码,但dfs代码是个TLE的
TLE代码:
ac代码:
TLE代码:
#include<stdio.h> #include<string.h> #include<iostream> #include<vector> #include<set> #include<map> #include<queue> #include<ctype.h> #include<stack> #include<math.h> #include <string> #include<algorithm> using namespace std; typedef unsigned long long ULL; char a[31][31][31]; int book[31][31][31]; int next[][3]={0,1,0, 0,0,1, 0,-1,0, 0,0,-1, 1,0,0, -1,0,0}; int l,r,c; int mini; void dfs(int lev,int row,int col,int temp) { if(a[lev][row][col]=='E') { if(mini>temp) mini=temp; return; } int tlev,trow,tcol; for(int i=0;i<6;i++) { tlev=lev+next[i][0]; trow=row+next[i][1]; tcol=col+next[i][2]; if(tlev>=l||tlev<0||trow>=r||trow<0||tcol>=c||tcol<0) continue; if(a[tlev][trow][tcol]!='#'&&book[tlev][trow][tcol]==0) { book[tlev][trow][tcol]=1; dfs(tlev,trow,tcol,temp+1); book[tlev][trow][tcol]=0; } } return; } int main() { ios::sync_with_stdio(false);cin.tie(0); w e0fa hile(cin>>l>>r>>c&&(l||r||c)) { int ti,tj,tk; for(int i=0;i<l;i++) for(int j=0;j<r;j++) cin>>a[i][j]; int flag=0; for(int i=0;i<l&&!flag;i++) for(int j=0;j<r&&!flag;j++) for(int k=0;k<c&&!flag;k++) { if(a[i][j][k]=='S') { ti=i; tj=j; tk=k; } flag=1; break; } // cout<<ti<<tj<<tk<<endl; mini=99999; dfs(ti,tj,tk,0); if(mini==99999) cout<<"Trapped!"<<endl; else printf("Escaped in %d minute(s).\n",mini); } return 0; }
ac代码:
#include<stdio.h> #include<string.h> #include<iostream> #include<vector> #include<set> #include<map> #include<queue> #include<ctype.h> #include<stack> #include<math.h> #include <string> #include<algorithm> using namespace std; typedef unsigned long long ULL; char a[31][31][31]; int book[31][31][31]; int next[][3]={0,1,0, 0,0,1, 0,-1,0, 0,0,-1, 1,0,0, -1,0,0}; struct dun { int x; int y; int step; int z; }start,ter; int l,r,c; int mini; void bfs() { queue<dun> q; dun node; q.push(start); while(!q.empty()) { node=q.front(); q.pop(); if(node.x==ter.x&&node.y==ter.y&&node.z==ter.z) { mini=node.step; break; } for(int i=0;i<6;i++) { int tx,ty,tz; tx=node.x+next[i][0]; ty=node.y+next[i][1]; tz=node.z+next[i][2]; if(tx<0||ty<0||tz<0||tx>=l||ty>=r||tz>=c) continue; if(a[tx][ty][tz]!='#') { a[tx][ty][tz]='#'; dun v; v.x=tx; v.y=ty; v.z=tz; v.step=node.step+1; q.push(v); } } } } int main() { ios::sync_with_stdio(false);cin.tie(0); while(scanf("%d%d%d",&l,&r,&c)!=EOF&&(l||r||c)) { int ti,tj,tk; for(int i=0;i<l;i++) for(int j=0;j<r;j++) scanf("%s",a[i][j]); int flag=0; for(int i=0;i<l&&!flag;i++) for(int j=0;j<r&&!flag;j++) for(int k=0;k<c&&!flag;k++) { if(a[i][j][k]=='S') { start.x=i; start.y=j; start.z=k; start.step=0; } if(a[i][j][k]=='E') { ter.x=i; ter.y=j; ter.z=k; } } mini=99999; bfs(); if(mini==99999) printf("Trapped!\n"); else printf("Escaped in %d minute(s).\n",mini); } return 0; }
相关文章推荐
- POJ 2251 Dungeon Master /UVA 532 Dungeon Master / ZOJ 1940 Dungeon Master(广度优先搜索)
- ZOJ1940 POJ2251 Dungeon Master 求三维迷宫路径问题,广度优先搜索
- Uva 532 - Dungeon Master(三维迷宫)
- uva 532 Dungeon Master(BFS)
- uva532 - Dungeon Master
- zoj 1940 Dungeon Master(BFS)
- ZOJ Problem Set - 1940 Dungeon Master
- UVa532 Dungeon Master 三维迷宫
- [uva-532]Dungeon Master (BFS)
- uva 532 - Dungeon Master
- ZOJ 1940 Dungeon Master 【BFS】
- zoj 1940 Dungeon Master
- uva 532 Dungeon Master(三维bfs)
- ZOJ 1940 Dungeon Master-BFS-(最短路径)
- uva 532 Dungeon Master
- zoj - 1940 - Dungeon Master
- UVA 532 - Dungeon Master
- zoj - 1940 - Dungeon Master
- uva 532 - Dungeon Master
- UVA 532--Dungeon Master