Хаген ??
С некоторыми ограничениями это может быть легко, без этого может стать сложнее.С ограничениями я имею в виду, что первый мост должен быть источником правды.Подумайте об этих случаях:
[0,1]
[1,2]
[3,4]
[4,5]
(две части, соединенные внутри одинаковой длины)
[0,1]
[1,2]
[3,4]
[4,5]
(первый мост исключен)
Чтопроизойдет, если подключены мосты 1 + 2 и 3 + 4, но не обе части вместе?Я имею в виду это ...
[0,1]
[2,3]
[3,4]
[4,5]
Предполагая первый мост в качестве источника истины, вы можете попробовать это:
public class IslandConnector {
private final List<Bridge> includedBridges = new ArrayList<>();
private List<Bridge> excludedBridges;
public IslandConnector(List<Bridge> bridges) {
this.excludedBridges = new ArrayList<>();
for(Bridge bridge : bridges) {
if(includedBridges.isEmpty()) {
includedBridges.add(bridge);
}
else {
if(!tryIncludeBridge(bridge)) {
excludedBridges.add(bridge);
}
}
}
}
private boolean tryIncludeBridge(Bridge bridge) {
for(Bridge includedBridge: includedBridges) {
if(bridge.hasSameS(includedBridge)) {
includeBridge(bridge);
return true;
}
}
return false;
}
private void includeBridge(Bridge bridge) {
includedBridges.add(bridge);
for(Bridge excludedBridge: excludedBridges) {
if(bridge.hasSameS(excludedBridge)) {
excludedBridges.remove(excludedBridge);
includeBridge(excludedBridge);
}
}
}
public List<Bridge> getIncludedBridges() {
return includedBridges;
}
public static void main(String... args) {
System.out.println(new IslandConnector(Arrays.asList(
new Bridge(0, 1),
new Bridge(1, 2),
new Bridge(2, 3),
new Bridge(3, 4)
)).getIncludedBridges());
System.out.println(new IslandConnector(Arrays.asList(
new Bridge(0, 1),
new Bridge(1, 2),
new Bridge(3, 4)
)).getIncludedBridges());
System.out.println(new IslandConnector(Arrays.asList(
new Bridge(0, 1),
new Bridge(2, 3),
new Bridge(3, 4)
)).getIncludedBridges());
}
}
печать
[[0,1], [1,2], [2,3], [3,4]]
[[0,1], [1,2]]
[[0,1]]