作者: 游氏手游网 发布时间: 2025-05-23 14:28
可以,但不能超过朝向井道的墙面
电子围栏价格便宜,质量过得硬,技术有保障,售后有保障,就可以作为您的首选,上海容晨挺不错的。
扩建1级围栏需要畜牧场等级3级,金币1000。扩建后可容纳动物数+1,稀有动物来访率+1%,饲料槽上限增加40。
用一个二维数组表示迷宫,如图:
四周均设为1,表示围墙,防止越界;0代表道路,1代表墙壁,如果要走出迷宫,只能走值为0的元素。
迷宫中的每个点,都有8个方向可以试探,用一个二维数组表示:
int[][] move = {{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
例如1,-1表示横坐标前移一位,纵坐标后移一位。从入口出发,按某一个方向向前探索,如果存在未走过的道路,则到达一个新元素,否则试探下一个方向;若所有的方向均没有道路,则沿原路返回前一点,换下一个方向继续试探,直到所有可能的通路都搜索到,或找到一条通路,或无路可走又返回到入口点。
这里可以用一个栈来实现,每走一步,将该位置压入栈中,若该点无路可走,则出栈返回上一位置。
好了,第一步,设计栈中存放的元素:public class Step {
int x,y,d; //横坐标、纵坐标、方向
public Step(int x,int y,int d) {
this.x = x;
this.y = y;
this.d = d;
}
}
然后,回溯法探路:public static int path(int[][] maze,int[][] move,Stack s){
Step temp = new Step(1,1,-1); //起点
s.push(temp);
while(!s.isEmpty()){
temp = (Step) s.pop();
int x = temp.x;
int y = temp.y;
int d = temp.d+1;
while(d<8){
int i = x + move[d][0];
int j = y + move[d][1];
if(maze[i][j] == 0){ //该点有路可通
temp = new Step(i,j,d); //到达新点
s.push(temp);
x = i;
y = j;
maze[x][y] = -1; //到达新点,标识已经到达
if(x == 6 && y == 8){
return 1; //到达出口,迷宫有路,返回1
}else{
d = 0; //重新初始化方向
}
}else{
d++; //改变方向
}
}
}
return 0;
}
最后,测试:
public static void main(String[] args) {
int[][] maze = {{1,1,1,1,1,1,1,1,1,1},
{1,0,1,1,1,0,1,1,1,1},
{1,1,0,1,0,1,1,1,1,1},
{1,0,1,0,0,0,0,0,1,1},
{1,0,1,1,1,0,1,1,1,1},
{1,1,0,0,1,1,0,0,0,1},
{1,0,1,1,0,0,1,1,0,1},
{1,1,1,1,1,1,1,1,1,1}};
int[][] move = {{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
Stack s = new Stack();
Stack s1 = new Stack();
int a = path(maze, move, s);
while(!s.isEmpty()){
Step step = (Step) s.pop();
System.out.println(step.x+:+step.y);
}
}
效果图: