我想在图表中查找所有周期并使用此解决方案Finding all cycles in undirected graphs
算法工作正常,但我想传递二维数组作为参数,但是出现了一个问题:
给定的图形声明为
static int[][] graph =
{
{1, 7}, {1, 8}, {7, 8}, {2, 3},
{3, 4}, {6, 4},
{7, 6}, {8, 7}
};
它有效,但我用了
int[][] intGraph = new int[500][4];
.....
intGraph[j][0] = Integer.parseInt(edge[i]);
intGraph[j][1] = Integer.parseInt(edge[i+1]);
intGraph[j][2] = Integer.parseInt(edge[i+2]);
....
我可以通过arrayname[x][y]
但当我试图将其作为参数传递给:(上面链接中的所有算法)
public GraphCycleFinder(int[][] graphs) {
graph = graphs;
for (int i = 0; i < graph.length; i++){
System.out.println(i); //added to check itterations
for (int j = 0; j < graph[i].length; j++)
{
//System.out.print(graph[i][j]);
findNewCycles(new int[] {graph[i][j]});
}
}
我没有结果,没有错误。当我打印出i值(检查它迭代的程度)时,它在循环通过我的数组时给出0(但应该从0到500),但是从0到数组长度打印这个硬编码数组。
我认为有一些数组声明,因为我试过
int[][] intGraph;
然后输入像
这样的值 intGraph[j][0] = Integer.parseInt(edge[i]);
但我得到了java.lang.NullPointerException
有什么想法吗?
P.S。对不起,如果太愚蠢的问题,我是java的新手。
更新
问题不在于数组声明。我评论了findNewCycles(new int[] {graph[i][j]});
并且bouth周期给出了必要的结果。该算法中的方法findNewCycles
可能无法处理这个大数组。 :(虽然只有200个顶点和500个边缘。不多。
答案 0 :(得分:1)
以下是一些可以帮助你的要点(我希望他们以某种方式做到)
数组声明与问题标题
相同在java中,你可以用两种方式声明数组
数组数据类型的变量(如int数组类型)
int[] a,b; //both a and b are of integer array type
某种数据类型的数组变量(如int)
int c[],d; //both c and d are of int type but only c is array
初始化,因为它是必需的 我们可以按如下方式声明和初始化数组
int[] a = {1, 2, 3, 4, 5};
// or
int b[][] = {{1, 2, 3}, {4, 5, 6}, {1, 3, 5}, {2, 4, 6}};
我们可以按如下方式初始化声明的数组
a[0] = 1;
a[1] = 2*a[0]; //or any other expression
您错过的内容或代码/问题中可能遗漏的内容
graph
是边数组,边有两个顶点,因此intGraph[500][4]
应为intGraph[500][2]
public GraphCycleFinder(int[][] graphs) {...}
如果您在static
中调用main()
,则}
应为intGraph[j]
,如上所述,最后关闭.....
intGraph[j][0] = Integer.parseInt(edge[i]);
intGraph[j][1] = Integer.parseInt(edge[i+1]);
intGraph[j][2] = Integer.parseInt(edge[i+2]);
....
。{/ li>
int [][]intGraph;
。 我们的意思是代码
public GraphCycleFinder(int[][] graphs){graph=graphs;...}
你只是在同一行中初始化一个维度,或者例如如果j = 1那么你将intGraph [1] [0]初始化为intGraph [1] [3]而不是所有j = 0到499除外1
并且很可能遇到 NPE ,因为int [][]intGraph=new int[500][4];
您没有初始化所有元素并尝试在函数{{1}}中复制未初始化的数组
并且在使用{{1}}时你没有得到它,因为你正在初始化所有元素并且没有NULL值。
希望这有帮助!!