永发信息网

Java迷宫算法问题(用栈实现)有算法简述

答案:1  悬赏:80  手机版
解决时间 2021-03-29 20:35
Java迷宫算法问题(用栈实现)有算法简述
最佳答案
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Test {

public static void main(String[] args) throws FileNotFoundException {
Scanner input = new Scanner(new File("Maze2tong.txt"));
int row = 0;
char[][] Mazemap = new char[12][58];
while (input.hasNext()) {
String line = input.nextLine();
for (int column = 0; column <= line.length() - 1; column++) {
char c = line.charAt(column);
Mazemap[row][column] = c;
}
row++;
}
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 58; j++) {
System.out.print(Mazemap[i][j]);
}
System.out.print("
");
}
LinkedList> trace = new LinkedList>();
System.out.println(maze(Mazemap, trace));
System.out.println(trace);
}

public static boolean maze(char[][] maze,
List> trace) {
LinkedList> path = new LinkedList>();
HashSet> traverse = new HashSet>();

for (int i = 0; i < maze.length; i++) {
for (int j = 0; j < maze[i].length; j++) {
if (maze[i][j] == 'S') {
path.add(new TwoTuple(i, j));
}
}
}
while (!path.isEmpty()) {
TwoTuple temp = path.pop();

if (traverse.contains(temp)) {
continue;
} else if (maze[temp.first][temp.second] == 'F') {
trace.add(temp);
return true;
} else if (!traverse.contains(temp)) {
if (temp.second + 1 < maze[temp.first].length
&& maze[temp.first][temp.second + 1] != 'W')
path.add(new TwoTuple(temp.first,
temp.second + 1));
if (temp.second - 1 > 0
&& maze[temp.first][temp.second - 1] != 'W')
path.add(new TwoTuple(temp.first,
temp.second - 1));
if (temp.first + 1 < maze.length
&& maze[temp.first + 1][temp.second] != 'W')
path.add(new TwoTuple(temp.first + 1,
temp.second));
if (temp.first - 1 > 0
&& maze[temp.first - 1][temp.second] != 'W')
path.add(new TwoTuple(temp.first - 1,
temp.second));
traverse.add(temp);
trace.add(temp);
}
}
trace.clear();
return false;
}
}

class TwoTuple {
public final A first;
public final B second;

public TwoTuple(A a, B b) {
first = a;
second = b;
}

@Override
public int hashCode() {
return first.hashCode() + second.hashCode();
}

@Override
public boolean equals(Object obj) {
if (!(obj instanceof TwoTuple)) {

}
return obj instanceof TwoTuple && first.equals(((TwoTuple) obj).first)
&& second.equals(((TwoTuple) obj).second);
}

public String toString() {
return "(" + first + ", " + second + ")";
}
} // /:-



import java.io.File;
import java.io.FileNotFoundException;
import java.util.LinkedList;
import java.util.Scanner;
class MyPoint
{
    public boolean visited=false;
    public int parentRow=-1;
    public int parentColumn=-1;
    public final char content;
    public int x;
    public int y;
    public MyPoint(char c,int x,int y)
    {
     this.content = c;
     this.x = x;
     this.y = y;
    }
}
public class Maze
{

    public static MyPoint[][] getMazeArray(){
Scanner input = null;
MyPoint[][] mazemap = new MyPoint[12][58];
try {
input = new Scanner(new File("Maze2tong.txt"));
int row = 0;
while (input.hasNext()) {
String line = input.nextLine();
for (int column = 0; column <= line.length() - 1; column++) {
char c = line.charAt(column);
MyPoint point = new MyPoint(c,row,column);
mazemap[row][column] = point;
}
row++;
}
input.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return mazemap;
    }
    public static boolean tomRun(MyPoint[][] maze,MyPoint end)
    {
     int x = maze.length;
     int y = maze[0].length;
     LinkedList stack=new LinkedList();
for (int i = 0; i < maze.length; i++) {
for (int j = 0; j < maze[i].length; j++) {
if (maze[i][j].content == 'S') {
stack.push(maze[i][j]);
maze[i][j].visited=true;
}
}
}
        boolean result=false;
        while(!stack.isEmpty())
        {
            MyPoint t=stack.pop();
           //System.out.println("pop point:"+t.x+" "+t.y+" value:"+maze[t.x][t.y]);
            if(t.content == 'F')
            {
                result=true;
                end.x = t.x;
                end.y = t.y;
                break;
            }
            if(t.x-1 > 0 && maze[t.x-1][t.y].visited==false && maze[t.x-1][t.y].content != 'W')
            {
                stack.push(maze[t.x-1][t.y]);
                maze[t.x-1][t.y].parentRow=t.x;
                maze[t.x-1][t.y].parentColumn=t.y;
                maze[t.x-1][t.y].visited=true;
            }
            if(t.x + 1 < x && maze[t.x+1][t.y].visited==false && maze[t.x+1][t.y].content != 'W')
            {
                stack.push(maze[t.x+1][t.y]);
                maze[t.x+1][t.y].parentRow=t.x;
                maze[t.x+1][t.y].parentColumn=t.y;
                maze[t.x+1][t.y].visited=true;
            }
            if(t.y - 1 > 0 && maze[t.x][t.y - 1].visited==false && maze[t.x][t.y-1].content != 'W')
            {
                stack.push(maze[t.x][t.y-1]);
                maze[t.x][t.y-1].parentRow=t.x;
                maze[t.x][t.y-1].parentColumn=t.y;
                maze[t.x][t.y-1].visited=true;
            }
            if( t.y + 1 < y && maze[t.x][t.y + 1].visited==false && maze[t.x][t.y+1].content != 'W')
            {
                stack.push(maze[t.x][t.y+1]);
                maze[t.x][t.y+1].parentRow=t.x;
                maze[t.x][t.y+1].parentColumn=t.y;
                maze[t.x][t.y+1].visited=true;
            }
 
        }
        return result;
    }
    public static void show(int x,int y,MyPoint[][] visited)
    {
        if(visited[x][y].parentRow==-1)
        {
            System.out.println("["+x+","+y+"]");
            return;
        }
        show(visited[x][y].parentRow,visited[x][y].parentColumn,visited);
        System.out.println("->"+"["+x+","+y+"]");
    }
    public static void main(String[] args)
    {
     MyPoint[][] maze = getMazeArray();
     MyPoint point = new MyPoint('c',1,1);
        if(tomRun(maze,point))
        {
            System.out.println("逃生路径如下:");
            show(point.x,point.y,maze);
        }
        else
            System.out.println("无法走出迷宫!");
    }

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WSOOOOOOOOOOOOOOWOOOOOOOOOOOOOOOOOWOOOOOOOOOOOOOOOWOOOOOOW
WWOOOOOOOOOOOOOWWWWWWWWWWWWWOOOOOOOOOOWWWWWWWWWWWWWOOOOOOW
WWWWWWOOOOOOOOOOOOWWWWWWWOOOOOOOOOOOOWWWWWWWWWWWWWWWWOOOOW
WOOOOOOWWWWWWWWWWWWWWOOOOOOOOOOOWWWWWWWWWWWWWWWWWWWWWWWWWW
WOOOOWWWWWWWOOOOOOWWWWOOOOOOWWWWWWWWWWWOOOOWWWWWWWWWOWWWWW
WOOOWWWWWWWWWWWWOOWWWWWWWWWWWWOOOOOOOOOOOOWWWWWWWWWOOOOOWW
WOOWWWWWWWWWWWWWOOWWWWWWWWWWWWWWWWWOOOOOOOWWWWWWWWWWWWOOOW
WOWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWOOOOOOOWWWWWWWWWWWOOW
WOWWWWWWWWWWWWWOOOOOOOOOOOOOOOOOOOOOOOOOOOOWWWWWWWWWWWWOOW
WOOOOOOOOOOOOOOOOWWWWOOOOOOOOWWWWWWWOOOOOOWWWWWWWWWWWWWWFW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WSOOOOOOOOOOOOOOWOOOOOOOOOOOOOOOOOWOOOOOOOOOOOOOOOWOOOOOOW
WWOOOOOOOOOOOOOWWWWWWWWWWWWWOOOOOOOOOOWWWWWWWWWWWWWOOOOOOW
WWWWWWOOOOOOOOOOOOWWWWWWWOOOOOOOOOOOOWWWWWWWWWWWWWWWWOOOOW
WOOOOOOWWWWWWWWWWWWWWOOOOOOOOOOOWWWWWWWWWWWWWWWWWWWWWWWWWW
WOOOOWWWWWWWOOOOOOWWWWOOOOOOWWWWWWWWWWWOOOOOOOOOOOOOOOOOWW
WOOOWWWWWWWWWWWWOOWWWWWWWWWWWWOOOOOOOOOOOOWWWWWWWWWOOOOOWW
WOOWWWWWWWWWWWWWOOWWWWWWWWWWWWWWWWWOOOOOOOWWWWWWWWWWWWOOOW
WOWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWOOOOOOOWWWWWWWWWWWOOW
WOWWWWWWWWWWWWWOOOOOOOOOOOOOOOOOOOOOOOOOOOOWWWWWWWWWWWWOOW
WOOOOOOOOOOOOOOOOWWWWOOOOOOOOWWWWWWWOOOOOOWWWWWWWWWWWWWWFW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
银川市 去西夏王陵和镇北堡西部影城怎么坐公
3之3江滨幼儿园在哪里啊,我有事要去这个地方
本文结尾段主要运用了什么写作技巧他对刻画苏
礼物单用户只可兑换1个;是一个qq帐号可以兑换
笑傲江湖〈吕颂贤〉版的怎么看不到了啊,
上海市S20外环高速早上7点半到至9点半外地车
鹬蚌相争被一抓走后子孙后代又在河滩上相遇续
西湖摘抄
百度贴吧申请吧主的入口在哪
过故人庄 孟浩然本诗一,二句记事,写的 是什
工程施工月末有余额吗,应该怎么处理
iPhone可以看国外电视综艺的APP
上大学考体育高水平好还是学画画好还是艺考模
创造的创是个多音字别一个音怎么组词
粘火烧的做法
推荐资讯
下列艺人中,哪个是日本女艺人?
电磁炉22r1w的电阻值是多少
c++ 栈和堆怎么理解
谁的旧爱不是别人的新欢o
maya 怎样将材质球的效果烘焙至贴图
I don't think any of my friends have s
168乘40的圆面积是多大
台北杨妈轻卤肉饭地址有知道的么?有点事想过
评剧共分几派
1982年的五分钱,现在。能值多少钱?
大数据在教学中有什么应用
惠普6530b好不好
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?