/** Source code example for "A Practical Introduction to Data Structures and Algorithm Analysis, 3rd Edition (Java)" by Clifford A. Shaffer Copyright 2008-2011 by Clifford A. Shaffer */ /** Adjacency list graph implementation */ class Graphl implements Graph { private GraphList[] vertex; // The vertex list private int numEdge; // Number of edges public int[] Mark; // The mark array public Graphl() {} public Graphl(int n) // Constructor { Init(n); } public void Init(int n) { Mark = new int[n]; vertex = new GraphList[n]; for (int i=0; i j) break; vertex[i].insert(currEdge); } } /** Delete an edge */ public void delEdge(int i, int j) { if (isEdge(i, j)) { vertex[i].remove(); numEdge--; } } /** Determine if an edge is in the graph */ public boolean isEdge(int v, int w) { Edge it = vertex[v].getValue(); // Check if j is the current neighbor in the list if ((it != null) && (it.vertex() == w)) return true; for (vertex[v].moveToStart(); vertex[v].currPos() < vertex[v].length(); vertex[v].next()) // Check whole list if (vertex[v].getValue().vertex() == w) return true; return false; } /** @return an edge's weight */ public int weight(int i, int j) { if (isEdge(i, j)) return vertex[i].getValue().weight(); return 0; } /** Set/Get the mark value for a vertex */ public void setMark(int v, int val) { Mark[v] = val; } public int getMark(int v) { return Mark[v]; } }