图
- 邻接矩阵
代码所添加图
import java.util.Arrays;
public class Graph {
/* 结点 */
private node[] nodes = new node[10];
private int nodeNum = 0;
/* 弧 */
private int[][] num = new int[10][10];
private int max = 1314;
/* 辅助数组,用于遍历图 */
private int[] visit;
/**
* 主函数
* @param args ...
*/
public static void main(String[] args) {
Graph g = new Graph();
g.initGraph();
/* 添加结点 */
{
g.addNode(0, "A");
g.addNode(1, "B");
g.addNode(2, "C");
g.addNode(3, "D");
g.addNode(4, "E");
g.addNode(5, "F");
}
/* 添加弧 */
{
g.addArc(0, 1, 1);
g.addArc(0, 2, 2);
g.addArc(0, 3, 3);
g.addArc(1, 4, 5);
g.addArc(2, 4, 6);
g.addArc(3, 5, 8);
}
/* 输出信息 */
{
System.out.println("输出结点信息");
g.printNodeData();
System.out.println();
System.out.println("输出弧信息:");
g.printArcData();
System.out.println();
g.initVisit();
System.out.println("深度优先遍历:");
g.DFS(0);
System.out.println();
g.initVisit();
System.out.println("广度优先遍历:");
g.BFS(0);
System.out.println();
}
}
/**
* 初始化
*/
private void initGraph(){
for (int[] x:num)
Arrays.fill(x,max);
}
/**
* 初始化辅助数组
*/
private void initVisit(){
visit = new int[nodeNum];
Arrays.fill(visit,0);
}
/**
* 添加结点
* @param id 结点编号
* @param data 结点数据
*/
private void addNode(int id,String data){
node node = new node();
node.setId(id);
node.setData(data);
nodes[nodeNum++] = node;
}
/**
* 添加弧
* @param id_1 ...
* @param id_2 ...
* @param weight 权值
*/
private void addArc(int id_1,int id_2,int weight){
num[id_1][id_2] = weight;
num[id_2][id_1] = weight;
}
/**
* 深度优先遍历
*/
private void DFS(int id){
System.out.println("[ id = " + nodes[id].getId() + ",data = " + nodes[id].getData() + " ]");
visit[id] = 1;
for(int i = 0;i < nodeNum;i++)
if(num[id][i] != max && visit[i] == 0)
DFS(i);
}
/**
* 广度优先遍历
*/
private void BFS(int id){
/* 队列,用于广度遍历图 */
int[] queue = new int[nodeNum];
int front;
int rear;
int p;
front = rear = 0;
queue[front++] = id;
visit[id] = 1;
while(front != rear){
p = queue[rear++];
for(int i = 0;i < nodeNum;i++)
if(num[p][i] != max && visit[i] != 1) {
queue[front++] = i;
visit[i] = 1;
}
System.out.println("[ id = " + nodes[p].getId() + ",data = " + nodes[p].getData() + " ]");
}
}
private void printNodeData(){
for(int i = 0;i < nodeNum;i++){
System.out.println("[ id = " + nodes[i].getId() + ",data = " + nodes[i].getData() + "]");
}
}
/**
* 输出弧信息
*/
private void printArcData(){
for(int i = 0;i < nodeNum;i++){
for(int j = 0;j < nodeNum;j++){
System.out.print(num[i][j] + " ");
}
System.out.println();
}
}
}
/**
* 结点类
*/
final class node{
private int id;
private String data;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
- 记录 - 以供复习
若有不足,多谢指正!