您的位置:首页 > 编程语言 > Java开发

迷宫 java实验

2014-04-20 16:52 183 查看
public class TestThree {

static int mazeSize = 12;
static char maze[][] = new char [mazeSize][mazeSize];  //保存迷宫地图信息

public static void main(String[] args) {

maze();
}

static void maze()
{
//先随机生成迷宫矩阵(mazeSize X mazeSize),{0,1}矩阵,其中1代表通路,0代表墙,并显示出来。
//设置起点和终点,为了简单化,将第一个生成的'1'点设为起点,最后生成的'0'点设为终点
//记录路程,1234分别代表上下左右。
boolean startingOk = false;
int startingX = 0, startingY = 0, endingX = 0, endingY = 0; //起点和终点的坐标

//生成以及显示迷宫
System.out.println("随机生成的迷宫地图为:");
System.out.print("   ");
for(int i = 0; i<12; i++)
{
System.out.print(i+" ");
}
System.out.println();
System.out.print("  ╔");
for(int i = 0; i<24; i++)
{
System.out.print("═");
}
System.out.println("╗");
for(int i = 0; i<12; i++)
{
System.out.printf("%2d",i);
System.out.print("║");
for(int j = 0; j<12; j++)
{
if( ((float) Math.random()) >= 0.4)
{
maze[i][j] = '1';
if(startingOk == false)  //设置起点
{
startingX = i;
startingY = j;
startingOk = true;
System.out.print("♀ ");
continue;
}
endingX = i;  //设置终点
endingY = j;
System.out.print("  ");
}
else
{
maze[i][j] = '0';
System.out.print("██");
}
}
System.out.print("║");
System.out.println();

}
System.out.print("  ╚");
for(int i = 0; i<24; i++)
{
System.out.print("═");
}
System.out.println("╝");

System.out.println("随机生成的起点坐标是:"+startingX+" "+startingY);
System.out.println("随机生成的终点坐标是:"+endingX+" "+endingY);

//回溯法找路,看是不是有解。
if( findWay(startingX,startingY,endingX,endingY,startingX,startingY) == false)
{
System.out.println("此迷宫没有出路!!");
}
}

static boolean findWay(int x,int y,int endingX,int endingY,int startingX,int startingY )
{
boolean doFindWay = false;
if( x == endingX && y == endingY)
{
showWay(startingX,startingY,endingX,endingY);
return true;
}
if( x+1 < mazeSize && maze[x+1][y] == '1') //向下走
{
maze[x][y] = '↓';
doFindWay = findWay(x+1,y,endingX,endingY,startingX,startingY);
maze[x][y] = '1';
if(doFindWay == true)
{
return true;
}
}
if( y+1 < mazeSize && maze[x][y+1] == '1')  //向右走
{
maze[x][y] = '→';
doFindWay = findWay(x,y+1,endingX,endingY,startingX,startingY);
maze[x][y] = '1';
if(doFindWay == true)
{
return true;
}
}
if(x-1 >=0 && maze[x-1][y] == '1')  //向右走
{
maze[x][y] = '↑';
doFindWay = findWay(x-1,y,endingX,endingY,startingX,startingY);
maze[x][y] = '1';
if(doFindWay == true)
{
return true;
}
}
if( y-1 >=0  && maze[x][y-1] == '1')  //向右走
{
maze[x][y] = '←';
doFindWay = findWay(x,y-1,endingX,endingY,startingX,startingY);
maze[x][y] = '1';
if(doFindWay == true)
{
return true;
}
}
return false;
}

static void showWay(int startingX, int startingY,int endingX,int endingY)
{
System.out.print("   ");
for(int i = 0; i<12; i++)
{
System.out.print(i+" ");
}
System.out.println();
System.out.print("  ╔");
for(int i = 0; i<24; i++)
{
System.out.print("═");
}
System.out.println("╗");
for(int i = 0; i<12; i++)
{
System.out.printf("%2d",i);
System.out.print("║");
for(int j = 0; j<12; j++)
{
if(i == startingX && j == startingY)
{
System.out.print("♀ ");
continue;
}

if(i == endingX && j == endingY)
{
System.out.print("OK");
continue;
}

if(maze[i][j] == '1')
{
System.out.print("  ");
}
else if(maze[i][j] == '0')
{
System.out.print("██");
}
else
{
System.out.print(maze[i][j]);
System.out.print(maze[i][j]);
//System.out.print("☆");
}
}
System.out.print("║");
System.out.println();

}
System.out.print("  ╚");
for(int i = 0; i<24; i++)
{
System.out.print("═");
}
System.out.println("╝");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java