您的位置:首页 > 编程语言 > Java开发

Java实现基于邻接表的图的建立

2017-05-13 15:31 471 查看


Java实现基于邻接表的图的建立

图类:
package graph;
/**
*
* @author linziyu
*基于构造好的矩阵进行图结构的建立
*/
public class Graph {

/*定义边节点*/
public class edgeNode {
int ivex;//该边指向的顶点的位置
edgeNode nextNode; //指向下一个边节点
}
/*定义点节点*/
public class vexNode{
char data; //该点的点信息
edgeNode firstEdge;//该点指向的第一条边

}

vexNode[] vexArray;//顶点数组

/*
* 将node节点链接到目标节点target的最后
*/
public void linkLast(edgeNode target ,edgeNode node) {
while (target.nextNode!=null) {
target=target.nextNode;
}
target.nextNode=node;
}

/*
* 返回字符data在顶点数组的位置
*/
public int getPostio(char data) {

for(int i=0;i<vexArray.length;i++) {
if (data==vexArray[i].data) {
return i;
}
}
return -1;
}

/*
* 创建基于邻接表的图
* vexs是顶点的数组,edges是边的数组
*/
public void buildGraph(char[] vexs,char[][] edges) {
int vLen = vexs.length;//得到顶点的数量大小
int eLen = edges.length;//得到边的数量大小
vexArray = new vexNode[vLen];//创建顶点数组

/*
* 初始化顶点数组
*/
for(int i=0;i<vexArray.length;i++) {
vexArray[i] = new vexNode();//创建顶点节点
vexArray[i].data = vexs[i];//把参数顶点数组的数据赋予到使用的顶点数组中
vexArray[i].firstEdge = null;//第一条连接的边先置空
}

/*
* 初始化边
*/
for(int i=0;i<eLen;i++) {

char c1 = edges[i][0];//起始字符
char c2 = edges[i][1];//终点字符

int start = getPostio(c1);//起始字符位置
int end = getPostio(c2);//终点字符位置

edgeNode eNode1 = new edgeNode();//新建一个边节点
eNode1.ivex = end;//指向终点位置

/*
* 如果该顶点的第一条连接边为空则指向新建的节点eNode1
* 不然就把该节点放在最后
*/
if (vexArray[start].firstEdge==null) {
vexArray[start].firstEdge = eNode1;
} else {

linkLast(vexArray[start].firstEdge,eNode1);
}

edgeNode eNode2 = new edgeNode();//新建节点
eNode2.ivex = start;//指向起始位置

/*
* 同上
*/
if (vexArray[end].firstEdge==null) {
vexArray[end].firstEdge = eNode2;
} else {
linkLast(vexArray[end].firstEdge, eNode2);
}

}

}
/**
* 输出图
*/
public void print() {
System.out.printf("List Graph:\n");
for (int i = 0; i < vexArray.length; i++) {
System.out.printf("%d(%c): ", i, vexArray[i].data);//输出节点的位置和数据
edgeNode node = vexArray[i].firstEdge;//得到节点的第一人连接边
/*
* 循环输出边数据
*/
while (node != null) {
System.out.printf("%d(%c) ", node.ivex, vexArray[node.ivex].data);
node = node.nextNode;
}
System.out.printf("\n");
}
}

}


测试类:
package graph;

public class Test {

public static void main(String[] args) {

char[] vexs = {'A','B','C','D','E','F','G'};
char[][] edges = new char[][] {
{'A', 'C'},
{'A', 'D'},
{'A', 'F'},
{'B', 'C'},
{'C', 'D'},
{'E', 'G'},
{'F', 'G'}};
Graph aGraph = new Graph();
aGraph.buildGraph(vexs, edges);
aGraph.print();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: