我有一些問題,檢查我的鄰接列表是否有周期。 我想做一個函數,檢查我的鄰接表是否有至少存在一個循環。鄰接鏈接列表週期檢測 - Java
基於我的程序。首先,我必須輸入根節點,然後輸入許多節點,圖中的節點,邊的數量以及表示邊的邊的鄰接表。鄰接列表中的每個條目都包含一對節點。
樣品輸入:
Root node: "A"
Number of nodes: 3
Vertices/Nodes:
A
B
C
Number of edges: 3
A
B
B
C
C
A
A --> B
B --> C
C --> A
上面的示例輸入具有周期:A - >乙 - 「ç - >甲] 欲輸出是否具有是否循環。
這是我的計劃至今:
import java.util.Scanner;
class Neighbor {
public int vertexNum;
public Neighbor next;
public Neighbor(int vnum, Neighbor nbr) {
this.vertexNum = vnum;
next = nbr;
}
}
class Vertex {
String name;
Neighbor adjList;
Vertex(String name, Neighbor neighbors) {
this.name = name;
this.adjList = neighbors;
}
}
public class DirectedCycle {
Vertex[] adjLists;
public DirectedCycle() {
Scanner sc = new Scanner(System.in);
//Root Node
System.out.print("Root node: ");
String rn = sc.nextLine();
//Number of nodes
System.out.print("Number of vertices/nodes: ");
int nodes = sc.nextInt();
adjLists = new Vertex[nodes];
//List of nodes
System.out.println("Vertices:");
for (int v=0; v < adjLists.length; v++) {
String letter = sc.next();
adjLists[v] = new Vertex(letter, null);
}
//Number of edges
System.out.print("Number of edges: ");
int edges = sc.nextInt();
System.out.println("<v1> <v2>");
for(int i=0; i<edges; i++) {
int v1 = indexForName(sc.next());
int v2 = indexForName(sc.next());
adjLists[v1].adjList = new Neighbor(v2, adjLists[v1].adjList);
}
}
int indexForName(String name) {
for (int v=0; v < adjLists.length; v++) {
if (adjLists[v].name.equals(name)) {
return v;
}
}
return -1;
}
public void print() {
System.out.println();
for (int v=0; v < adjLists.length; v++) {
System.out.print(adjLists[v].name);
for (Neighbor nbr=adjLists[v].adjList; nbr != null; nbr=nbr.next) {
String name = adjLists[nbr.vertexNum].name;
System.out.print(" --> " + name);
}
System.out.println("\n");
}
}
public static void main(String[] args) {
DirectedCycle graph = new DirectedCycle();
graph.print();
}
}
我上面程序目前尚不具備,檢查週期,也是我想要實現的根節點的事情的功能。如果任何人都可以提高我上面的程序只是回答我,給我一些我可以信賴的代碼。謝謝! (我是初學者!)
你做得很好!這不是一個人們爲你編寫代碼的網站,所以你可能會遇到一些社區消極情緒。祝你好運! –
http://stackoverflow.com/questions/2663115/how-to-detect-a-loop-in-a-linked-list –