poj2251
2015-09-18 15:57
239 查看
设计算法:广度搜索
题目大意:给定一个a层,b行,c列的三维地牢,并给定了一个起点和终点,要求以最短的时间从起点走到终点,“.”表示可走区域t,“#”表示不能通过区域
题目分析:明显的广度搜索
代码如下:
题目大意:给定一个a层,b行,c列的三维地牢,并给定了一个起点和终点,要求以最短的时间从起点走到终点,“.”表示可走区域t,“#”表示不能通过区域
题目分析:明显的广度搜索
代码如下:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; public class Main { static int a,b,c; static int maze[][][]=new int[60][60][60]; static P start; static int END=2; static Queue<P> q; static int[][][] vis=new int[60][60][60]; static int[][] d={{-1,0,0},{1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}}; static class P{ int x,y,z,step; P(int x,int y,int z,int step){ this.x=x;this.y=y;this.z=z;this.step=step; } } static void fill(int [][][] arr,int b){ for(int i=0;i<60;i++){ for(int j=0;j<60;j++){ for(int k=0;k<60;k++){ arr[i][j][k]=b; } } } } public static void main(String[] args) throws IOException { BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); String s; q=new LinkedList<P>(); String[] str=new String[3]; while(!(s=in.readLine()).equals("0 0 0")) { q.clear(); fill(vis, 0); str=s.split(" "); a=Integer.valueOf(str[0]); b=Integer.valueOf(str[1]); c=Integer.valueOf(str[2]); for(int i=0;i<a;i++) { for(int j=0;j<b;j++) { s=in.readLine(); for(int k=0;k<c;k++) { if(s.charAt(k)=='#') { maze[i][j][k]=1; }else if(s.charAt(k)=='.') { maze[i][j][k]=0; }else if(s.charAt(k)=='S') { maze[i][j][k]=0;start=new P(i,j,k,0); }else if (s.charAt(k)=='E') { maze[i][j][k]=END; } } } s=in.readLine(); } int mStep=dfs(); if(mStep==-1) { System.out.println("Trapped!"); }else { System.out.println("Escaped in "+mStep+" minute(s)."); } } } public static int dfs() { q.offer(start); vis[start.x][start.y][start.z]=1; P head,next; int x,y,z,step; int cx,cy,cz; while(!q.isEmpty()) { head=q.poll(); x=head.x;y=head.y;z=head.z;step=head.step; for(int i=0;i<6;i++) { cx=x+d[i][0];cy=y+d[i][1];cz=z+d[i][2]; if(cx>=0 && cx<a && cy>=0 && cy<b && cz>=0 && cz<c) { if(vis[cx][cy][cz]==0 && maze[cx][cy][cz]!=1) { q.offer(new P(cx,cy,cz,step+1)); vis[cx][cy][cz]=1; if(maze[cx][cy][cz]==END) { return step+1; } } } } } return -1; } }
相关文章推荐
- mysqldump参数选项
- Hive 查询优化
- [转] PostgreSQL的时间/日期函数使用
- NameValueCollection类
- java多线程并发协作:生产者消费者模型
- jQuery采用连缀写法实现的折叠菜单效果
- max_allowed_packet
- xcode7升级后遇到问题
- OAuth 2原理讲解
- iOS开发_统计xcode代码行数
- IOS 制作动态及静态Framework
- Android SurfaceView实战 打造抽奖转盘
- php的会话管理
- setsockopt :SO_LINGER 选项设置
- 沙海拾贝(一):201409
- android web
- JSP: JSTL标签详解
- PHP编程规范
- ios9 http请求报错
- dom 元素占据高度