1、广度优先搜索
import java.util.*;
public class Main {
public static int NUM = 8;
public static boolean[] visited = new boolean[NUM];
public static ArcNode[] nodes = new ArcNode[NUM];
public static Queue<ArcNode> queue = new LinkedList<>();
public static void main(String [] args) {
for (int i = 0; i < NUM; i++) {
nodes[i] = new ArcNode(i + 1);
}
for (int i = 0; i < NUM; i++) {
visited[i] = false;
}
nodes[0].nextArc = new ArcNode(2);
nodes[0].nextArc.nextArc = new ArcNode(3);
nodes[1].nextArc = new ArcNode(1);
nodes[1].nextArc.nextArc = new ArcNode(4);
nodes[1].nextArc.nextArc.nextArc = new ArcNode(5);
nodes[2].nextArc = new ArcNode(1);
nodes[2].nextArc.nextArc = new ArcNode(6);
nodes[2].nextArc.nextArc.nextArc = new ArcNode(7);
nodes[3].nextArc = new ArcNode(2);
nodes[3].nextArc.nextArc = new ArcNode(8);
nodes[4].nextArc = new ArcNode(2);
nodes[4].nextArc.nextArc = new ArcNode(8);
nodes[5].nextArc = new ArcNode(3);
nodes[6].nextArc = new ArcNode(3);
nodes[7].nextArc = new ArcNode(4);
nodes[7].nextArc.nextArc = new ArcNode(5);
BFSTravals(nodes);
}
private static void BFSTravals(ArcNode[] nodes) {
for(int i = 0; i < nodes.length; i++) {
if(!visited[nodes[i].data - 1]) {
BFS(nodes[i]);
}
}
}
private static void BFS(ArcNode node) {
if(node != null) {
queue.offer(node);
visited[node.data - 1] = true;
while (queue.size() > 0) {
ArcNode curNode = queue.poll();
System.out.println(curNode.data);
curNode = nodes[curNode.data - 1].nextArc;
while (curNode != null) {
if(!visited[curNode.data - 1]) {
queue.offer(curNode);
visited[curNode.data - 1] = true;
}
curNode = curNode.nextArc;
}
}
}
}
public static class ArcNode{
int data;
ArcNode nextArc;
public ArcNode(int data){
this.data = data;
}
}
}
2、深度优先搜索
public class Main {
public static int NUM = 8;
public static boolean[] visited = new boolean[NUM];
public static ArcNode[] nodes = new ArcNode[NUM];
public static void main(String [] args) {
for (int i = 0; i < NUM; i++) {
nodes[i] = new ArcNode(i + 1);
}
for (int i = 0; i < NUM; i++) {
visited[i] = false;
}
nodes[0].nextArc = new ArcNode(2);
nodes[0].nextArc.nextArc = new ArcNode(3);
nodes[1].nextArc = new ArcNode(1);
nodes[1].nextArc.nextArc = new ArcNode(4);
nodes[1].nextArc.nextArc.nextArc = new ArcNode(5);
nodes[2].nextArc = new ArcNode(1);
nodes[2].nextArc.nextArc = new ArcNode(6);
nodes[2].nextArc.nextArc.nextArc = new ArcNode(7);
nodes[3].nextArc = new ArcNode(2);
nodes[3].nextArc.nextArc = new ArcNode(8);
nodes[4].nextArc = new ArcNode(2);
nodes[4].nextArc.nextArc = new ArcNode(8);
nodes[5].nextArc = new ArcNode(3);
nodes[6].nextArc = new ArcNode(3);
nodes[7].nextArc = new ArcNode(4);
nodes[7].nextArc.nextArc = new ArcNode(5);
DFSTravals(nodes);
}
private static void DFSTravals(ArcNode[] nodes) {
for(int i = 0; i < nodes.length; i++) {
if(!visited[nodes[i].data - 1]) {
DFS(nodes[i]);
}
}
}
private static void DFS(ArcNode node) {
visited[node.data - 1] = true;
System.out.println(node.data);
ArcNode curNode = nodes[node.data - 1];
curNode = curNode.nextArc;
while (curNode != null) {
if(!visited[curNode.data - 1]) {
DFS(curNode);
}
curNode = curNode.nextArc;
}
}
public static class ArcNode{
int data;
ArcNode nextArc;
public ArcNode(int data){
this.data = data;
}
}
}