1.什麼是圖
圖是一種和樹相象的數據結構,通常有一個固定的形狀,這是由物理或抽象的問題來決定的。
2.鄰接
如果兩個頂點被同一條邊連接,就稱這兩個頂點是鄰接的。
3.路徑
路徑是從一個頂點到另一個頂點經過的邊的序列。
4.連通圖和非連通圖
至少有一條路徑可以連接所有的頂點,那麼這個圖就是連通的,否則是非連通的。
5.有向圖和無向圖
有向圖的邊是有方向的,如只能從A到B,不能從B到A。
無向圖的邊是沒有方向的,可以從A到B,也可以從B到A。
6.帶權圖
在有些圖中,邊被賦予了一個權值,權值是一個數字,它可以代表如兩個頂點的物理距離,或者是一個頂點到另一個頂點的時間等等.這樣的圖叫做帶權圖.
7.用程序來實現圖.
Vertex.java
package ch18;
/**
* 頂點類
* @author gzw
*
*/
public class Vertex {
private char label; //表示A,B,C,D,E,F... ...等頂點
public Vertex(char label) {
this.label = label;
}
}
Graph.java
package ch18;
/**
* 圖
* @author Administrator
*
*/
public class Graph {
//頂點數組
private Vertex[] vertexList;
//鄰接矩陣
private int[][] adjMat;
//頂點的最大數目
private int maxSize;
//當前頂點
private int nVertex;
public Graph(int maxSize) {
this.maxSize = maxSize;
vertexList = new Vertex[maxSize];
vertexList = new Vertex[maxSize];
adjMat = new int[maxSize][maxSize];
for(int i = 0; i < maxSize; i++) {
for(int j = 0; j < maxSize; j++) {
adjMat[i][j] = 0; //初始條件:所有頂點都不相連(無邊)
}
}
nVertex = 0;
}
/**
* 添加頂點
*/
public void addVertex(char label) {
vertexList[nVertex++] = new Vertex(label);
}
/**
* 添加邊
*/
public void addEdge(int start,int end) {
adjMat[start][end] = 1;
adjMat[end][start] = 1;
}
}
TestGraph.java
package ch18;
public class TestGraph {
public static void main(String[] args) {
/*Graph g = new Graph();
g.addVertex('A');
g.addVertex('B');
g.addVertex('C');*/
char[] vertexs = new char[]{'A','B','C'};
//初始化頂點
for(int i=0;i<vertex.length;i++){
g.addVertex(vertex[i]);
}
//初始化邊
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
}
}
- 相關文章: