A B C D E F G A{N, 5, 7 ,N, N, N, 2} B{5, N, N ,9, N, N, 3} C{7, N, N ,N, 8, N, N} D{N, 9, N ,N, N, 4, N} E{N, N, 8 ,N, N, 5, 4} F{N, N, N ,4, 5, N, 6} G{2, 3, N ,N, 4, 6, N}
public int[] already_arr; public int[] pre_visited; public int[] dis;
/** * 構(gòu)造器 * @param length 頂點(diǎn)的個(gè)數(shù) * @param index 出發(fā)點(diǎn)的索引 */ public VisitedVertex(int length, int index) { this.already_arr = new int[length]; this.pre_visited = new int[length]; this.dis = new int[length]; // 初始化dis數(shù)組 Arrays.fill(dis, N); dis[index] = 0; }
/** * 判斷index對(duì)應(yīng)的頂點(diǎn)是否被訪問(wèn)過(guò) * @param index * @return */ public boolean isVisited(int index) { return already_arr[index] == 1; }
/** * 更新dis數(shù)組,索引為index的值更新為len * @param index * @param len */ public void updateDis(int index, int len) { dis[index] = len; }
/** * 更新前驅(qū)頂點(diǎn) * @param index * @param val */ public void updatePre(int index, int val) { pre_visited[index] = val; }
/** * 將index設(shè)置為已訪問(wèn) * @param index */ public void updateAlreadyArr(int index) { already_arr[index] = 1; }
/** * 返回出發(fā)頂點(diǎn)到index這個(gè)頂點(diǎn)的距離 * @param index * @return */ public int getDis(int index) { return dis[index]; }
/** * 返回要處理的下一個(gè)頂點(diǎn) * @return */ public int nextVertexs() { int index = 0; int min = N; for (int i=0; i< already_arr.length; i++) { if (!isVisited(i) && dis[i] < min) { min = dis[i]; index = i; } } updateAlreadyArr(index); return index; }
public static void main(String[] args) { String[] vertexs = {"A", "B", "C", "D", "E", "F", "G"}; int[][] edges = { {N, 5, 7 ,N, N, N, 2}, {5, N, N ,9, N, N, 3}, {7, N, N ,N, 8, N, N}, {N, 9, N ,N, N, 4, N}, {N, N, 8 ,N, N, 5, 4}, {N, N, N ,4, 5, N, 6}, {2, 3, N ,N, 4, 6, N} }; Graph graph = new Graph(vertexs, edges); graph.dsj(6); } }