图在计算机中,是一种非常有用的数据结构,而本博文我们采用java来模拟图(无权图和带权图)。
从数学意义上说,树是图的一种。而在计算机中,图的应用方式与树不一样。图通常有一个固定的形状,由物理或抽象的问题所决定的。而在图中,节点可能代表任务,有向边则代表某个任务必须在另一个任务前完成。故而,图的形状取决于真是世界的具体情况。图的节点叫做顶点。
图的顶点的java:
class Vertex //顶点类
{
public char lab;
public boolean wasVisited;
public Vertex(char lab)
{
label = lab;
wasVisited = false;
}
}
顶点对象也能放在数组中,用下标指示。
Vertex[] vertexList = new Vertex[nVerts++]; //将顶点形成一个数组来配合使用
下面是图类:
class Graph
{
vertexList = new Vertex[MAX_VERTS]; //数组
adjMat = new int[MAX_VERTS][MAX_VERTS]; //二维数组模拟邻接矩阵
nVerts = 0;
for(int i = 0; i < MAX_VERTS; i++) //初始化邻接矩阵
{
for(int j = 0; j < MAX_VERTS; j++)
{
adjMat[i][j] = 0;
}
sortedArray = new char[MAX_VERTS];
}
}
public void addVertex(char lab) //无向图插入一个顶点
{
vertexList[nVerts++] = new Vertex(lab);
}
public void addEdge(int start,int end) //无向图插入一条边,注意是无向图,所以两边都要插入
{
adjMat[start][end] = 1;
adjMat[end][start] = 1;
}
public void displayVertex(int v)
{
System.out.print(vertexList[v].label);
}
}