图的基本概念
1.什么是图
图是一种和树相象的数据结构,通常有一个固定的形状,这是由物理或抽象的问题来决定的。
2.邻接
如果两个顶点被同一条边连接,就称这两个顶点是邻接的。
3.路径
路径是从一个顶点到另一个顶点经过的边的序列。
4.连通图和非连通图
至少有一条路径可以连接所有的顶点,那么这个图就是连通的,否则是非连通的。
5.有向图和无向图
有向图的边是有方向的,如只能从A到B,不能从B到A。
无向图的边是没有方向的,可以从A到B,也可以从B到A。
6.带权图
在有些图中,边被赋予了一个权值,权值是一个数字,它可以代表如两个顶点的物理距离,或者是一个顶点到另一个顶点的时间等等.这样的图叫做带权图.
7.用程序来实现图.
1.什么是图
图是一种和树相象的数据结构,通常有一个固定的形状,这是由物理或抽象的问题来决定的。
2.邻接
如果两个顶点被同一条边连接,就称这两个顶点是邻接的。
3.路径
路径是从一个顶点到另一个顶点经过的边的序列。
4.连通图和非连通图
至少有一条路径可以连接所有的顶点,那么这个图就是连通的,否则是非连通的。
5.有向图和无向图
有向图的边是有方向的,如只能从A到B,不能从B到A。
无向图的边是没有方向的,可以从A到B,也可以从B到A。
6.带权图
在有些图中,边被赋予了一个权值,权值是一个数字,它可以代表如两个顶点的物理距离,或者是一个顶点到另一个顶点的时间等等.这样的图叫做带权图.
7.用程序来实现图.
(1) 数组表示法
Vertex.java
Graph.java
TestGraph.java
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);
}
}