Warshall演算法JAVA實現
package graph;</p><p>class Vertex {<br />public char label;<br />// -------------------------------------------------------------</p><p>public Vertex(char lab) // constructor<br />{<br />label = lab;<br />}<br />} // end class Vertex<br />// //////////////////////////////////////////////////////////////</p><p>/**<br /> * 有向圖<br /> */<br />public class WarshallGraph {<br />private final int MAX_VERTS = 5;<br />private Vertex vertexList[]; // list of vertices<br />private int adjMat[][]; // adjacency matrix<br />private int nVerts; // current number of vertices<br />private char sortedArray[];</p><p>// -------------------------------------------------------------<br />public WarshallGraph() // constructor<br />{<br />vertexList = new Vertex[MAX_VERTS];<br />// adjacency matrix<br />adjMat = new int[MAX_VERTS][MAX_VERTS];<br />nVerts = 0;<br />for (int j = 0; j < MAX_VERTS; j++)<br />// set adjacency<br />for (int k = 0; k < MAX_VERTS; k++)<br />// matrix to 0<br />adjMat[j][k] = 0;<br />} // end constructor<br />// -------------------------------------------------------------</p><p>public void addVertex(char lab) {<br />vertexList[nVerts++] = new Vertex(lab);<br />}</p><p>// -------------------------------------------------------------<br />public void addEdge(int start, int end) {<br />adjMat[start][end] = 1;<br />}</p><p>// -------------------------------------------------------------<br />public void displayVertex(int v) {<br />System.out.print(vertexList[v].label);<br />}</p><p>// -------------------------------------------------------------<br />public void warshall()<br />{<br />for (int y = 0; y < MAX_VERTS; y++) { //行<br />for (int x = 0; x < MAX_VERTS; x++) { //列<br />if(adjMat[y][x] == 1){ // y -> x<br />for (int z = 0; z < MAX_VERTS; z++) {<br />if(adjMat[z][y] == 1 && z != x){ //z -> y找到串連到 y 的節點<br />adjMat[z][x] = 1; //z -> x<br />}<br />}<br />}<br />}<br />}<br />} // end topo<br />// -------------------------------------------------------------</p><p>public void printGraph(){<br />for (int i = 0; i < MAX_VERTS; i++) {<br />for (int j = 0; j < MAX_VERTS; j++) {<br />System.out.print(adjMat[i][j] + " ");<br />}<br />System.out.println();<br />}<br />}<br />// ------------------------------------------------------------<br />public static void main(String[] args) {<br />WarshallGraph theGraph = new WarshallGraph();<br />theGraph.addVertex('A'); // 0<br />theGraph.addVertex('B'); // 1<br />theGraph.addVertex('C'); // 2<br />theGraph.addVertex('D'); // 3<br />theGraph.addVertex('E'); // 4<br />//theGraph.addVertex('F'); // 5<br />//theGraph.addVertex('G'); // 6<br />//theGraph.addVertex('H'); // 7</p><p>theGraph.addEdge(0, 2); // AD<br />theGraph.addEdge(1, 0); // AE<br />theGraph.addEdge(1, 4); // AE<br />theGraph.addEdge(2, 3); // AE<br />theGraph.addEdge(3, 4); // BE<br />theGraph.addEdge(4, 2); // CF<br />//theGraph.addEdge(3, 6); // DG<br />//theGraph.addEdge(4, 6); // EG<br />//theGraph.addEdge(5, 7); // FH<br />//theGraph.addEdge(6, 7); // GH<br />theGraph.warshall();<br />theGraph.printGraph();<br />}<br />}<br />