Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建邻域数组列表来协调无向图中的节点?_Java_Matrix_Arraylist_Graph - Fatal编程技术网

Java 如何创建邻域数组列表来协调无向图中的节点?

Java 如何创建邻域数组列表来协调无向图中的节点?,java,matrix,arraylist,graph,Java,Matrix,Arraylist,Graph,给定一个二维数组矩阵,目标是定位所有相邻的坐标,将它们实例化为对象,并将它们添加到ArrayList中供以后使用。我遇到的问题是,在边缘情况下,邻域可能超出矩阵边界。那么,在Java中声明2d数组的边界以便它可能被条件语句捕获的最佳方法是什么 尝试了以下方法。不确定如何解释其中一个邻居超出矩阵边界的情况(例如,只有两个邻居的角节点) 最终的ArrayList应输出以下内容: 当前节点=(1,0),其中值等于7 邻域数组列表等于={(0,0)、(1,1)、(2,0)},其中值分别等于0、1、0。对

给定一个二维数组矩阵,目标是定位所有相邻的坐标,将它们实例化为对象,并将它们添加到ArrayList中供以后使用。我遇到的问题是,在边缘情况下,邻域可能超出矩阵边界。那么,在Java中声明2d数组的边界以便它可能被条件语句捕获的最佳方法是什么

尝试了以下方法。不确定如何解释其中一个邻居超出矩阵边界的情况(例如,只有两个邻居的角节点)

最终的ArrayList应输出以下内容:

当前节点=(1,0),其中值等于7

邻域数组列表等于=
{(0,0)、(1,1)、(2,0)}
,其中值分别等于0、1、0。

对于大小为NxM的二维矩阵中的给定(x,y),需要向上(x,y-1)、向下(x,y+1)、左(x-1,y)、右(x+1,y)邻域

可以使用下面的签名定义一个检查数组边界的简单函数

矩阵中的任何单元都是由其两个坐标定义的,仅一个坐标是不够的,因此需要检查相邻单元的两个坐标,以得出其在数组边界内的结论

布尔isSafe(int x,int y,int N,int M)

isSafe
将检查x,y是否在数组边界范围内,检查上限(N,M)和下限(0)。您可以轻松实现此函数(如果x或y中的任何一个超出范围,则返回false。如果没有超出范围,则返回true)

现在,对于给定的(x,y),使用函数
isSafe
检查一个邻居的坐标,比如检查它的(x,y-1),如果它返回true,则添加到列表中,否则忽略它

我还建议您在类节点中保留值


注意:当您试图获得与相同的内容非常相似的内容时,您可以参考邻接列表。我想您要做的是与已传递的数组的大小进行比较:

if (nodeX > 0)
    adjacentNodes.add(new Node(nodeX - 1, nodeY));
if (nodeX < enterGraph.length - 1)
    adjacentNodes.add(new Node(nodeX + 1, nodeY));
if (nodeY > 0)
    adjacentNodes.add(new Node(nodeX, nodeY - 1));
if (nodeY < enterGraph[nodeX].length - 1)
    adjacentNodes.add(new Node(nodeX, nodeY + 1));
if(nodeX>0)
add(新节点(nodeX-1,nodeY));
if(nodeX0)
添加(新节点(nodeX,nodeY-1));
if(nodeY
道歉。修复了一些用于编译的元素。一个警告是,这仍然不会编译,因为在条件语句中有一些注释,我想从中获得一些智慧。作为一个新手,这仅仅是为了尽可能最好地解决我的问题,而只是一个高层次的实现想法。甚至不确定如何生成此函数,但仅使其编码清晰。这似乎是可行的,当添加到我的示例中时,它会根据所检查节点的位置生成适当数量的相邻节点。快速提问,关于将自定义类对象的ArrayList转换为字符串之一以进行打印,是否已经存在Stackoverflow问题?只需为类创建一个
toString
方法并打印列表-它将自动将每个对象转换为其等效字符串。
0, 0, 0
7, 1, 0
0, 7, 0 
if (nodeX > 0)
    adjacentNodes.add(new Node(nodeX - 1, nodeY));
if (nodeX < enterGraph.length - 1)
    adjacentNodes.add(new Node(nodeX + 1, nodeY));
if (nodeY > 0)
    adjacentNodes.add(new Node(nodeX, nodeY - 1));
if (nodeY < enterGraph[nodeX].length - 1)
    adjacentNodes.add(new Node(nodeX, nodeY + 1));