Давайте сконцентрируемся на настройке 1 лабиринта, и затем мы можем повторить процесс для всех них.Я попытался написать алгоритм, дружественный к синтаксису Java.
Итак, вот наша переменная ArrayList для первого лабиринта, насколько я понимаю ...
List<String> preNodes, which contains:
{"A,G", "A,B,F", "B,A,C,G", "C,B,D,G", "D,C,E", "E,D,F,G", "F,A,E", "G,B,C,E"};
Поскольку первыйСтрока имеет особое значение, давайте отделим ее от остальных.(т.е. установите его как отдельную переменную String и удалите его из ArrayList).
String startAndEnd, which contains: "A,G";
List<String> preNodes, which contains:
{"A,B,F", "B,A,C,G", "C,B,D,G", "D,C,E", "E,D,F,G", "F,A,E", "G,B,C,E"};
Теперь давайте сначала соберем все нужные нам узлы, а затем сможем связать их.
//Define container for nodes
HashMap<String, Node> nodes = new HashMap<String, Node>();
//Create a node for each letter
for(String s : preNodes) {
String nodeName = s.charAt(0) + "";
nodes.put(nodeName, new Node());
}
//Link them up appropriately
for(String s : preNodes) {
String[] splitS = s.split(","); //1 letter in each array cell.
Node current = nodes.get(splitS[0]); //Get the node we're going to link up.
for(int i=1; i<splitS.length; i++) {
current.connect(nodes.get(splitS[i]));
}
}
//Finally, set the start and end Node.
String[] splitStartAndEnd = startAndEnd.split(",");
nodes.get(splitStartAndEnd[0]).isStart = true;
nodes.get(splitStartAndEnd[1]).isEnd = true;
Это должно сделать это, я думаю;теперь "узлы" содержат весь лабиринт, все связаны.Я поймал ошибку в вашем коде: ваша функция isConnected () должна возвращать false, если connections.isEmpty (), а не если он нулевой.Он никогда не должен быть нулевым, потому что вы инициализируете его в конструкторе новым списком.