如何访问和遍历链表元素的ArrayList



我正在尝试编写图ADT的邻接列表实现代码。

private ArrayList<LinkedList<Integer>> adjLists ;

但我不知道如何遍历图的顶点。。。

errr。。。你只需要经历每一个元素。。。

for(int i = 0;i<adjLists.size();i++){
for(int j = 0;j<adjLists.size();j++){
int element = adjLists.get(i).get(j);
//Then do whatever you want
}
}

下面是使用ArrayList<链接列表>

import java.util.*;
public class Graphs {
private ArrayList<LinkedList<Integer>> list;
public Graphs(int vertices) {
list = new ArrayList<>(vertices);
for (int i = 0; i < vertices; i++) {
list.add(i, new LinkedList<>());
}
}
public void addEdge(int v1, int v2) {
list.get(v1).add(v2);
list.get(v2).add(v1);
}
public void print() {
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.get(0).size(); j++) {
System.out.print(list.get(i).get(j) + " -> ");
}
System.out.print("null");
System.out.println("");
}
}
public void bfs(int soucevertex) {
ArrayList<Boolean> visited = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
visited.add(false);
}
Queue<Integer> queue = new LinkedList<>();
queue.add(soucevertex);
visited.set(soucevertex, true);
while (!queue.isEmpty()) {
for (int i = 0; i < list.get(queue.peek()).size(); i++) {
if (visited.get(list.get(queue.peek()).get(i)) == false) {
visited.set(list.get(queue.peek()).get(i), true);
queue.add(list.get(queue.peek()).get(i));
}
}
System.out.print(queue.poll() + " ");
}
}
public void dfs(int sourcevertex) {
ArrayList<Boolean> visited = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
visited.add(false);
}
dfsutil(sourcevertex, visited);
}
private void dfsutil(int source, ArrayList<Boolean> visited) {
visited.set(source, true);
System.out.print(source + " ");
for (int i = 0; i < list.get(source).size(); i++) {
if (visited.get(list.get(source).get(i)) == false) {
dfsutil(list.get(source).get(i), visited);
}
}
}
}

最新更新