迷宫算法实现

定义一个二维数组:

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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
package com.acm;

import java.util.Stack;

public class Maze {

	private static Stack<String> STACK = new Stack<String>();

	private static int MAZE[][] = { { 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 } };

	public static void generate() {
		int row = 0;
		int erect = 0;
		int size = MAZE.length;
		// !(row == size && erect == size)
		while (row != size - 1 || erect != size - 1) {
			int now_row = row;
			int now_erect = erect;
			if (row + 1 < size && MAZE[row + 1][erect] == 0) {
				row++;
			} else if (erect + 1 < size && MAZE[row][erect + 1] == 0) {
				erect++;
			} else if (row - 1 >= 0 && MAZE[row - 1][erect] == 0) {
				row--;
			} else if (erect - 1 >= 0 && MAZE[row][erect - 1] == 0) {
				erect--;
			} else {
				MAZE[now_row][now_erect] = 3;// DEAD
				if (STACK.empty()) {
					System.out.println("No resolution");
					return;
				}
				String pop = STACK.pop();
				String[] key = generateValue(pop);
				row = Integer.valueOf(key[0]);
				erect = Integer.valueOf(key[1]);
				continue;
			}
			STACK.push(generateKey(now_row, now_erect));
			MAZE[now_row][now_erect] = 2;
		}
		if (row == size - 1 && erect == size - 1) {
			STACK.push(generateKey(row, erect));
		}
		print();
	}

	public static void print() {
		for (String str : STACK) {
			System.out.println(str);
		}
	}

	public static String generateKey(int i, int j) {
		return "[" + i + "," + j + "]";
	}

	public static String[] generateValue(String key) {
		return key.replace("[", "").replace("]", "").split(",");
	}

	public static void main(String[] args) {
		generate();
	}
}

你可能感兴趣的:(算法)