定义一个二维数组:

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();
}
}

最新文章

  1. Spring 4 + Reactor Integration Example--转
  2. Azure 负载均衡和可用性集
  3. Effective C++ 3.资源管理
  4. [转]乐死我了,怎么样成为一个全栈程序员(Full Stack Developer),附我想专注的语言
  5. ACM Computer Factory
  6. C# Socket基础(一)之启动异步服务监听
  7. java_redis3.0.3集群搭建
  8. JAVA程序猿怎么才干高速查找到学习资料?
  9. 《Programming WPF》翻译 第3章 4.我们进行到哪里了?
  10. 编程内功修炼之数据结构—BTree(三)总结
  11. 使用gettimeofday测试函数运行的时间
  12. Arduino 各种模块篇 震动模块 vibrator
  13. 双向链表--Java实现
  14. Android - include属性用法
  15. 锐捷配置telnet
  16. spring cloud 入门系列五:使用Feign 实现声明式服务调用
  17. 浅析关于java的一些基础问题(上篇)
  18. 【LOJ 2004】「SDOI2017」硬币游戏
  19. CS231中的python + numpy课程
  20. 【代码笔记】Web-JavaScript-JavaScript语法

热门文章

  1. pretty-errors:美化python异常输出以使其清晰易读
  2. Xcode如何集成Pod教程
  3. Web登录配置-H3C-S5120-LI系列
  4. The finally block does not always execute in try finally
  5. StarUML之九、starUML的一些特殊属性的说明
  6. Android中使用画笔和画布绘制一个矩形
  7. MySQL服务器的运维与优化
  8. export和export default的区别
  9. .NET CLI简单使用
  10. python filter函数(40)