Naloga 4
This commit is contained in:
		
							parent
							
								
									8e8e0d3598
								
							
						
					
					
						commit
						c220ccf97c
					
				@ -22,9 +22,74 @@ public class Graf {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void grobaSila() {
 | 
					    void grobaSila() {
 | 
				
			||||||
 | 
					        int n = nodes.length;
 | 
				
			||||||
 | 
					        int m = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (MaxHeap<Node>.HeapNode node : nodes) {
 | 
				
			||||||
 | 
					            m += node.value.neighbors.size();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        m /= 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int[][] connections = new int[m][2];
 | 
				
			||||||
 | 
					        boolean[][] seen = new boolean[n][n];
 | 
				
			||||||
 | 
					        int idx = 0;
 | 
				
			||||||
 | 
					        for (int i = 0; i < n; i++) {
 | 
				
			||||||
 | 
					            for (int j = 0; j < nodes[i].value.neighbors.size(); j++) {
 | 
				
			||||||
 | 
					                int neighbor = nodes[i].value.neighbors.get(j).value.id;
 | 
				
			||||||
 | 
					                if (!seen[i][neighbor]) {
 | 
				
			||||||
 | 
					                    connections[idx][0] = i;
 | 
				
			||||||
 | 
					                    connections[idx][1] = neighbor;
 | 
				
			||||||
 | 
					                    seen[i][neighbor] = seen[neighbor][i] = true;
 | 
				
			||||||
 | 
					                    idx++;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int bestCover = getBestCover(n, connections);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (int i = 0; i < n; i++) {
 | 
				
			||||||
 | 
					            if (((bestCover >> i) & 1) != 0) {
 | 
				
			||||||
 | 
					                System.out.print(i + " ");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        System.out.println();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static int getBestCover(int n, int[][] connections) {
 | 
				
			||||||
 | 
					        int bestCover = -1;
 | 
				
			||||||
 | 
					        int minSize = n + 1;
 | 
				
			||||||
 | 
					        long minPowerSum = Long.MAX_VALUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int maxMask = 1 << n;
 | 
				
			||||||
 | 
					        for (int mask = 0; mask < maxMask; mask++) {
 | 
				
			||||||
 | 
					            boolean cover = true;
 | 
				
			||||||
 | 
					            for (int[] e : connections) {
 | 
				
			||||||
 | 
					                int u = e[0], v = e[1];
 | 
				
			||||||
 | 
					                if (((mask >> u) & 1) == 0 && ((mask >> v) & 1) == 0) {
 | 
				
			||||||
 | 
					                    cover = false;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (!cover) continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            int size = Integer.bitCount(mask);
 | 
				
			||||||
 | 
					            long powerSum = 0;
 | 
				
			||||||
 | 
					            for (int i = 0; i < n; i++) {
 | 
				
			||||||
 | 
					                if (((mask >> i) & 1) != 0) {
 | 
				
			||||||
 | 
					                    powerSum += 1L << i;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (size < minSize || (size == minSize && powerSum < minPowerSum)) {
 | 
				
			||||||
 | 
					                minSize = size;
 | 
				
			||||||
 | 
					                minPowerSum = powerSum;
 | 
				
			||||||
 | 
					                bestCover = mask;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return bestCover;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void pozresni() {
 | 
					    void pozresni() {
 | 
				
			||||||
        MaxHeap<Node> heap = new MaxHeap<>(this.heap);
 | 
					        MaxHeap<Node> heap = new MaxHeap<>(this.heap);
 | 
				
			||||||
        for (var heapNode : nodes) {
 | 
					        for (var heapNode : nodes) {
 | 
				
			||||||
@ -51,17 +116,14 @@ public class Graf {
 | 
				
			|||||||
            used.add(node.id);
 | 
					            used.add(node.id);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        print(used);
 | 
					        int idxStart = used.size() > 100 ? used.size() - 100 : 0;
 | 
				
			||||||
    }
 | 
					        for (int i = idxStart; i < used.size(); i++) {
 | 
				
			||||||
 | 
					            System.out.print(used.get(i));
 | 
				
			||||||
    private void print(ArrList<Integer> arr) {
 | 
					            if (i < used.size() - 1) System.out.print(" ");
 | 
				
			||||||
        int idxStart = arr.size() > 100 ? arr.size() - 100 : 0;
 | 
					 | 
				
			||||||
        for (int i = idxStart; i < arr.size(); i++) {
 | 
					 | 
				
			||||||
            System.out.print(arr.get(i));
 | 
					 | 
				
			||||||
            if (i < arr.size() - 1) System.out.print(" ");
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        System.out.println();
 | 
					        System.out.println();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Node implements Comparable<Node> {
 | 
					class Node implements Comparable<Node> {
 | 
				
			||||||
@ -82,11 +144,6 @@ class Node implements Comparable<Node> {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        return deg;
 | 
					        return deg;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public String toString() {
 | 
					 | 
				
			||||||
        return "Node [id=" + id + ", degree=" + degree + "]";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MaxHeap<T extends Comparable<T>> {
 | 
					class MaxHeap<T extends Comparable<T>> {
 | 
				
			||||||
@ -103,11 +160,6 @@ class MaxHeap<T extends Comparable<T>> {
 | 
				
			|||||||
        public int compareTo(HeapNode o) {
 | 
					        public int compareTo(HeapNode o) {
 | 
				
			||||||
            return this.value.compareTo(o.value);
 | 
					            return this.value.compareTo(o.value);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        @Override
 | 
					 | 
				
			||||||
        public String toString() {
 | 
					 | 
				
			||||||
            return this.value.toString();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final private ArrList<HeapNode> arr;
 | 
					    final private ArrList<HeapNode> arr;
 | 
				
			||||||
@ -208,15 +260,6 @@ class MaxHeap<T extends Comparable<T>> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return max.value;
 | 
					        return max.value;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public String toString() {
 | 
					 | 
				
			||||||
        StringBuilder sb = new StringBuilder();
 | 
					 | 
				
			||||||
        for (int i = 0; i < arr.size(); i++) {
 | 
					 | 
				
			||||||
            sb.append(arr.get(i)).append(" ");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return sb.toString();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ArrList<T> {
 | 
					class ArrList<T> {
 | 
				
			||||||
@ -275,13 +318,4 @@ class ArrList<T> {
 | 
				
			|||||||
    public boolean isEmpty() {
 | 
					    public boolean isEmpty() {
 | 
				
			||||||
        return size == 0;
 | 
					        return size == 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public String toString() {
 | 
					 | 
				
			||||||
        StringBuilder sb = new StringBuilder();
 | 
					 | 
				
			||||||
        for (int i = 0; i < size; i++) {
 | 
					 | 
				
			||||||
            sb.append(array[i]).append(" ");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return sb.toString();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -12,8 +12,7 @@ public class Naloga4 {
 | 
				
			|||||||
        for (int[] povezava : povezave) {
 | 
					        for (int[] povezava : povezave) {
 | 
				
			||||||
            g.povezi(povezava[0], povezava[1]);
 | 
					            g.povezi(povezava[0], povezava[1]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        g.pozresni();
 | 
					        g.grobaSila();
 | 
				
			||||||
        g.pozresni();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user