ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

POJ-3984-迷宫问题(bfs+记录路径)

2020-02-01 11:03:18  阅读:236  来源: 互联网

标签:yy int bfs xx POJ new 3984 static dir


定义一个二维数组: 

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

Sample Output

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

路径记录方式:dir[x][y]数组记录方向UDLR,然后逆向记录下路径

代码:
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Scanner;
class Node{
        int x;
        int y;
        public Node(int x,int y){
                this.x=x;
                this.y=y;
        }
}
public class Main{
        static final int N=10;
        static int map[][]=new int[N][N];
        static char dir[][]=new char[N][N];
        static ArrayDeque<Node> q=new ArrayDeque<Node>();
        static int dx[]={0,0,1,-1};
        static int dy[]={1,-1,0,0};
        static boolean flag=false;
        static void bfs(){
                map[0][0]=1;
                q.offer(new Node(0,0));
                while(!q.isEmpty()){
                        Node t=q.poll();
                        for(int i=0;i<4;i++){
                                int xx=t.x+dx[i];
                                int yy=t.y+dy[i];
                                if(xx<0||yy<0||xx>=5||yy>=5||map[xx][yy]==1) continue;
                                map[xx][yy]=1;
                                q.offer(new Node(xx,yy));
                                if(i==0){
                                        dir[xx][yy]='R';
                                }
                                else if(i==1){
                                        dir[xx][yy]='L';
                                }
                                else if(i==2){
                                        dir[xx][yy]='D';
                                }
                                else{
                                        dir[xx][yy]='U';
                                }
                                if(t.x==4 && t.y==4){
                                    flag=true;
                                     break;
                                }
                        }
                        if(flag) break;
                }
                ArrayList<Node> v=new ArrayList<Node>();
                int i=4,j=4;
                while(i!=0 ||j!=0){
                         v.add(new Node(i,j));
                         if(dir[i][j]=='R'){
                                 j=j-1;
                         }
                         else if(dir[i][j]=='L'){
                                 j=j+1;
                         }
                         else if(dir[i][j]=='D'){
                                 i=i-1;
                         }
                         else{
                                 i=i+1;
                         }
                }
                System.out.println("(0, 0)");
                for(int k=v.size()-1;k>=0;k--){
                        Node s=v.get(k);
                        System.out.println("("+s.x+", "+s.y+")");
                }
        }
        public static void main(String[] args) {
                Scanner scan=new Scanner(System.in);
                for(int i=0;i<5;i++)
                    for(int j=0;j<5;j++)
                        map[i][j]=scan.nextInt();
                bfs();
        }
}

 

标签:yy,int,bfs,xx,POJ,new,3984,static,dir
来源: https://www.cnblogs.com/qdu-lkc/p/12247786.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有