public final class GraphC { // Adjacency list with nodes 0, 1, ..., n final int edges[][]; public GraphC (final int[][] edges) { this.edges = edges; } // Delete the nodes 'i' and 'j' and all adjacent edges public Graph loseEdges (final int i, final int j) { final int n = edges.length; final int[][] newedges = new int[n][]; edgelists: for (int k = 0; k < n; k++) { // if (k!=i && k!=j) continue; int z; // index to remove search: { if (k == i) { for (z = 0; z < edges[k].length; z++) if (edges[k][z] == j) break search; } else if (k == j) { for (z = 0; z < edges[k].length; z++) if (edges[k][z] == i) break search; } // No edge to be deleted; share this list. newedges[k] = edges[k]; continue edgelists; } // end search final int m = edges[k].length - 1; final int [] ne = new int[m]; System.arraycopy (edges[k], 0, ne, 0, z); System.arraycopy (edges[k], z+1, ne, z, m-z); newedges[k] = ne; } // end edgelists return new Graph(newedges); } }