Постановка проблемы
В Королевстве Такахаси есть архипел go из N островов, называемых островами Такахаси. Для удобства мы будем называть их Островом 1, Островом 2, ..., Островом N.
Между этими островами есть M видов регулярных лодочных рейсов. Каждая услуга соединяет два острова. I-й сервис соединяет остров ai и остров bi.
Cat Snuke сейчас находится на острове 1 и хочет go добраться до острова N. Однако оказалось, что прямого лодочного сообщения с острова нет. 1 до острова N, поэтому он хочет знать, возможно ли go до острова N с помощью двух лодок.
Если возможно go до острова N с помощью двух лодок, печать ВОЗМОЖНО; в противном случае выведите НЕВОЗМОЖНО.
Пример:
N = 3
First boat services : 1 2
Second boat services: 2 3
Вывод: ВОЗМОЖНО
Пояснение: Используя первую лодку, я могу начать с исходной точки 1 и go до 2. Теперь, используя вторую лодку, я могу go от 2 до 3, здесь 3. Мой пункт назначения.
Я пытаюсь понять, какой подход мы должны использовать для решения этой проблемы?
Я пробовал этот базовый подход c, который будет работать для этого теста случай, но я знаю, что иду неверным путем.
public static String check(List<Integer> boat1, List<Integer> boat2, int N) {
Map<Integer, Integer> first = new HashMap<>();
for (int i = 0; i < boat1.size() - 1; i++) {
first.put(boat1.get(i), boat1.get(i + 1));
}
Map<Integer, Integer> second = new HashMap<>();
for (int i = 0; i < boat2.size() - 1; i++) {
second.put(boat2.get(i), boat2.get(i + 1));
}
if (first.get(1) != null) {
int island = first.get(1);
if (second.get(island) != null) {
island = second.get(island);
if (island == N) {
return "POSSIBLE";
}
}
}
return "Impossible";
}
Обновление:
Допустим, услуги лодки 1 - это 1, 2, 3, 4 и лодка 2 услуги 3,5. Попытка ответить Josep сейчас:
public static void main(String[] args) {
GrafDirLlistes s = new GrafDirLlistes(5);
s.afegirAresta(1, 2, 1);
s.afegirAresta(2, 3, 1);
s.afegirAresta(3, 4, 1);
s.afegirAresta(3, 5, 1);
s.dfs();
System.out.println(s.existeixAresta(1, 5));
}
Я ожидаю истины для вышеуказанной программы, поскольку мы можем перемещаться от 1 до 5, как это 1-> 2-> 3-> 5, но программа возвращает false.