哈根??
有一些限制可能很容易,没有限制可能会变得更复杂。有了约束,我的意思是第一座桥应该是真相的来源。想想那些案例:
[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]
假设第一个桥是thruth的来源,你可以试试这个:
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]]