【发布时间】:2015-03-03 17:46:26
【问题描述】:
我在检查我的邻接列表是否有循环时遇到了一些问题。 我想做一个函数来检查我的邻接列表是否存在至少一个循环。
基于我的程序。首先,我必须输入根节点,然后输入节点的数量、图中的节点、边的数量以及表示边的邻接列表。邻接表中的每个条目都包含一对节点。
示例输入:
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 --> B --> C --> 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();
}
}
我上面的程序还没有检查周期的功能,我也想实现根节点的东西..如果有人可以改进我上面的程序,请回答我并给我一些代码我可以依靠。谢谢! (我是初学者!)
【问题讨论】:
-
你做得很好!这不是一个供人们为您编写代码的网站,因此您可能会遇到一些社区消极情绪。祝你好运!
标签: java cycle directed-graph adjacency-list cycle-detection