当我运行下面的代码时,我一直从这篇文章的标题中得到错误,尽管我不知道为什么。我试过了:Arrays.fill(marked, false);,我正在尝试找出有多少白色节点和黑色节点,连接blacknodes[]中不存在的节点。
public class BlackWhite {
private static boolean[] marked;
public BlackWhite(Graph G, int s) {
marked = new boolean[G.V()];
dfs(G, s);
}
public static int count(Graph G, int[] blacknodes) {
int rw_count = 0;
for (int w : G.adj(blacknodes.length)) {
if (marked(w)) {
rw_count++;
}
}
return rw_count;
}
private void dfs(Graph G, int v) {
marked[v] = true;
for (int w : G.adj(v)) {
if (!marked[w]) {
dfs(G, w);
}
}
}
public static boolean marked(int v) {
return marked[v];
}
public static void main(String[] args) {
Graph G = new Graph(3);
G.addEdge(1, 2);
G.addEdge(4, 1);
G.addEdge(1, 8);
System.out.println(BlackWhite.count(G, new int[] { 1 })); // should print 3
}}
发布于 2020-10-08 01:49:53
您正在BlackWhite类的构造器中初始化marked数组。但在main方法中,您从未调用过new BlackWhite()。因此,当您调用静态count方法时,您的marked数组仍然为空。
您应该像这样更改您的count方法。
public static int count(Graph G, int[] blacknodes) {
int rw_count = 0;
if(marked == null) marked = new boolean[G.V()];
for (int w : G.adj(blacknodes.length)) {
if (marked(w)) {
rw_count++;
}
}
return rw_count;
}https://stackoverflow.com/questions/64248837
复制相似问题