public class AdjacencyMatrix { private int INIT_SIZE = 1024; private int INCREMENT_SIZE = 512; private int[][] data = new int[INIT_SIZE][INIT_SIZE]; private String[] labels = new String[INIT_SIZE]; private int count = 0; public int size(){ return count; } public void clear(){ count = 0; } public int[] addNodes(String[] labels){ int[] idx = new int[labels.length]; for(int cnt=0;cntindex){ arrayCopy(data[row],0,data[row-1],0,index); arrayCopy(data[row],index+1,data[row-1],index,count-index-1); } } arrayCopy(labels,index+1,labels,index,count-index-1); count--; return true; } public boolean addEdge(String from,String to){ return addEdge(from,to,true); } public boolean addEdge(String from,String to,boolean directed){ return set(indexOf(from),indexOf(to),directed,1); } public boolean addEdge(int f_idx,int t_idx){ return addEdge(f_idx,t_idx,true); } public boolean addEdge(int f_idx,int t_idx,boolean directed){ return set(f_idx,t_idx,directed,1); } public boolean deleteEdge(String from,String to){ return deleteEdge(from,to,true); } public boolean deleteEdge(String from,String to,boolean directed){ return set(indexOf(from),indexOf(to),directed,0); } public boolean deleteEdge(int f_idx,int t_idx){ return deleteEdge(f_idx,t_idx,true); } public boolean deleteEdge(int f_idx,int t_idx,boolean directed){ return set(f_idx,t_idx,directed,0); } private boolean set(int f_idx,int t_idx,boolean directed,int value){ if(f_idx<0 || f_idx>=count || t_idx<0 || t_idx>=count){ return false; } data[f_idx][t_idx] = value; if(directed==false){ data[t_idx][f_idx] = value; } return true; } public int get(int f_idx,int t_idx){ if(f_idx<0 || f_idx>=count || t_idx<0 || t_idx>=count){ return -1; } return data[f_idx][t_idx]; } public String getNodeName(int index){ if(index < 0 || index >= count){ return null; } return labels[index]; } double[] getRates(int[] seeds_indexes,int index){ double[] rates = new double[2]; for(int rcnt=0;rcnt