나는 "number maze"라고 불리는 독특한 형태의 미로에 대한 해법을 연구 중이다. 본질적으로 당신이있는 모든 위치는 다음 가능한 이동 위치 (위, 아래, 대각선)를 나타내는 숫자 (1-4)입니다. 여기에 내가 말하는 것을 분명히하는 그림이있다.Number Maze Solving 알고리즘
마지막으로, 모든 위치가 한 번만 방문 할 수 있습니다. 목표는 미로를 통해 가장 긴 경로를 찾을 수있게하는 것입니다.
현재 내가 성공적으로 각각의 위치에서 가능한 움직임을 찾아 미로에서 가능한 모든 경로를 통해 반복 할 수 있습니다. 이 프로그램은 미로의 "끝"이 무엇인지 알지 못하지만 나중에 구현하기 쉽습니다. 현재 내가 가지고있는 문제는 가능한 모든 경로를 분석하고 어느 경로가 가장 길 냐를 알아 내기 위해 "경로 메모리"를 구현하는 방법을 모르겠다는 것입니다. 본질적으로 나는 모든 다른 경로를 저장하고 분석 할 방법이 필요합니다. 나는 ArrayList<String> MovePath
으로 그렇게하려고 시도했지만, 결국 작동하지 않게되었습니다. 나는 이것의 전체 재귀 측면이 나를 트립시키고 있다고 생각한다. 내 코드의 모든 중요한 부분이 아래에 게시됩니다. 모든 포인터는 감사하겠습니다.
private static String changeString(String currentstring, String addendum) {
return currentstring + addendum;
}
static ArrayList<String> solve(int X, int Y, String path, ArrayList<String> MovePath, int[][] PuzzleBoard) {
if (PuzzleBoard[X][Y] == 0) {
//If current position is blank, don't attempt to find moves
} else {
ArrayList<Point> AllMoves = FindMoves(PuzzleBoard, X, Y); //Find possible moves from current board location based on piece type
for (int i = 0; i < AllMoves.size(); i++) {//Iterate through possible moves
PuzzleBoard[X][Y] = 0; //set current position to 0 (empty)
X = (int) AllMoves.get(i).getX();//get move X coordinate
Y = (int) AllMoves.get(i).getY();//get move Y coordinate
String xstring = String.valueOf(X);
String ystring = String.valueOf(Y);
path = changeString(path, xstring);//Adds the current X coordinate to a string
path = changeString(path, ystring);//Adds the current Y coordinate to a string
MovePath.add(path);
solve(X, Y, path, MovePath, PuzzleBoard);
}
}
return MovePath;
}
public static void main(String[] args) {
int[][] BoardArray = new int[][]{
{4, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 1, 0},
{0, 1, 0, 0, 3, 0},
{0, 0, 2, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 3, 0, 1, 9}
//0 = empty
//9 = end
int x = 0; //starting x
int y = 0; //starting y
String paths = "";
ArrayList<String> MovePath = new ArrayList<String>();
ArrayList<String> Answer = new ArrayList<String>();
Answer = solve(x, y, paths, MovePath, BoardArray)
String longestpath = Collections.max(Answer, Comparator.comparing(s -> s.length()));
System.out.println(longestpath);
}
은}
에서 [긴 경로 문제]에 Wikipedia 기사 (https://en.wikipedia.org/wiki/Longest_path_problem) 당신에게 몇 가지 아이디어를 줄 수도 있습니다. – dnault