您的位置:首页 > 其它

算法提高 学霸的迷宫

2017-05-22 19:54 246 查看
一道bfs题,但要有一个记录数组,进行优化

代码:

import java.util.ArrayList;
import java.util.Scanner;

public class LearnerMaze {
//x为行 y为列 visit[]用来标记之前经过的位置,防止重复加入队列
private static int n,m,maze[][],orientX[],orientY[],visit[][];
private static String bufori[];
private static ArrayList<LearnerNode> list;
private static LearnerNode myNode;
public static void main(String[] args) {
// TODO 自动生成的方法存根
int time=0;
list=new ArrayList<LearnerNode>();
Scanner read=new Scanner(System.in);
String str=read.nextLine();
String strr[]=str.split(" ");
n=Integer.valueOf(strr[0]);
m=Integer.valueOf(strr[1]);
maze=new int
[m];
visit=new int
[m];
while(time<n){
str=read.nextLine();
for(int i=0;i<m;i++){
maze[time][i]=Integer.valueOf(str.charAt(i)-48);
}
time++;
}
orientX=new int[]{-1,1,0,0};
orientY=new int[]{0,0,-1,1};
bufori=new String[]{"U","D","L","R"};
if(maze[1][0]==0){
LearnerNode node=new LearnerNode();
node.buf.append("D");
node.x=1;
node.y=0;
node.Opos=0;
list.add(node);
}
if(maze[0][1]==0){
LearnerNode node=new LearnerNode();
node.buf.append("R");
node.x=0;
node.y=1;
node.Opos=2;
list.add(node);
}
bfs();
System.out.println(myNode.buf.length());
System.out.println(myNode.buf);
read.close();
}
private static void bfs(){
LearnerNode node;
int a,b;
while(!list.isEmpty()){
node=list.get(0);
list.remove(0);
if(node.x==n-1&&node.y==m-1){
myNode=node;
return;
}
for(int i=0;i<4;i++){
if(i!=node.Opos){
a=node.x+orientX[i];
b=node.y+orientY[i];
if(a<n&&b<m&&a>=0&&b>=0){
if(maze[a][b]==0){
LearnerNode temp=new LearnerNode();
if(i==0){
temp.Opos=1;
}else if(i==1){
temp.Opos=0;
}else if(i==2){
temp.Opos=3;
}else if(i==3){
temp.Opos=2;
}
if(visit[a][b]==0){
temp.x=a;
temp.y=b;
temp.buf.append(node.buf+bufori[i]);
list.add(temp);
visit[a][b]=1;
}

}
}

}
}
}

}
}
class LearnerNode{
int Opos,x,y;
StringBuffer buf=new StringBuffer();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: