原题
分别利用邻接矩阵和邻接表来完成图的广度优先遍历搜索,以下图为例:
首先构建该图的邻接表,随后输出结果为:
V1 -> V2 -> V3 -> V4 -> V5 -> V6 -> V7 -> V8
代码:
package bfs;
import java.util.Scanner;
//辅助队列类
class Queue {
int[] elements;
int base = 1;// 指向队列第一个位置
int top = 1;// 指向队列的最后一个为空的位置
public static final int CAPY = 16;
Scanner input = new Scanner(System.in);
// 构造函数
public Queue(int capy) {
elements = new int[capy + 1];
top = 1;
}
public Queue() {
this(CAPY);
}
// 入队
public void push(int value) {
if (top >= elements.length) {
int[] temp = new int[elements.length * 2];
System.arraycopy(elements, 0, temp, 0, elements.length);
elements = temp; // 使用新数组做为栈
}
elements[top] = value;
top++;
}
// 出队
public int pop() {
if (top == 1) {
System.out.println("是空队");
return 0;
} else {
int a = elements[base];// a为对象,可以把数值带出
for (int i = 1; i < top; i++) {
elements[i] = elements[i + 1];
}
elements[top] = 0;
top--;
return a;
}
}
}
// 結点类
class Node {
// 結點名称
String name;
// 指向下一个顶点的引用
Node next;
// 构建函数
public void createVertex1(int i, Node node) {
name = 'V' + "" + i;
next = node;
}
}
// 邻接表类
class Graph1 {
Scanner input = new Scanner(System.in);
// 結點组
Node[] Vexs;
// 图的当前顶点数
int vexnum;
// 前插法构建函数
public void createGraphFirst(int num, Graph2 adj) {
Vexs = new Node[num];
vexnum