Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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_Python_Algorithm_Graph Theory - Fatal编程技术网

Java 找出给定邻接矩阵中有多少个连接的节点组

Java 找出给定邻接矩阵中有多少个连接的节点组,java,python,algorithm,graph-theory,Java,Python,Algorithm,Graph Theory,我有一个列表,每个列表都是一个节点,包含其他节点的边。例如 [[1,1,0],[1,1,0],[0,0,1]] 当节点引用自己的位置时,以及当它与另一个节点有边时,该节点具有1,当不存在边时,该节点具有0 这意味着节点0([1,1,0])连接到节点1,而节点2([0,0,1])未连接到任何其他节点。因此,该列表可被视为邻接矩阵: 10有很多方法可以做到这一点。可以使用DFS/BFS或不相交集来解决此问题。以下是一些有用的链接: 如果保证输入矩阵描述可传递的连通性,则它有一种特殊的形式,允许算法

我有一个列表,每个列表都是一个节点,包含其他节点的边。例如
[[1,1,0],[1,1,0],[0,0,1]]

当节点引用自己的位置时,以及当它与另一个节点有边时,该节点具有
1
,当不存在边时,该节点具有
0

这意味着
节点0
[1,1,0]
)连接到
节点1
,而
节点2
[0,0,1]
)未连接到任何其他节点。因此,该列表可被视为邻接矩阵:


10有很多方法可以做到这一点。可以使用DFS/BFS或不相交集来解决此问题。以下是一些有用的链接:


如果保证输入矩阵描述可传递的连通性,则它有一种特殊的形式,允许算法只探测矩阵元素的子集。以下是Python中的一个示例实现:

def count_connected_组(adj):
n=len(形容词)
python 3中不需要节点_to _check=set([i代表范围(n)])#[]
计数=0
当节点\u到\u检查时:
计数+=1
node=nodes\u to\u check.pop()
相邻的=调整的[节点]
其他组成员=集合()
对于节点中的i\u到\u检查:
如果相邻[i]:
其他集团成员。添加(i)
节点\u到\u检查-=其他\u组\u成员
返回计数
#你的例子是:
形容词0=[[1,1,0],[1,1,0],[0,0,1]]
#与元组和布尔值相同:
形容词1=((真,真,假),(真,真,假),(假,假,真))
#另一个连接矩阵:
形容词2=((1,1,1,0,0),
(1, 1, 1, 0, 0),
(1, 1, 1, 0, 0),
(0, 0, 0, 1, 1),
(0, 0, 0, 1, 1))
#还有一个:
形容词3=((1,0,1,0,0),
(0, 1, 0, 1, 0),
(1, 0, 1, 0, 0),
(0, 1, 0, 1, 0),
(0, 0, 0, 0, 1))
对于调整0、调整1、调整2、调整3中的a:
印刷品(a)
打印(计数连接组(a))
# [[1, 1, 0], [1, 1, 0], [0, 0, 1]]
# 2
#((真,真,假),(真,真,假),(假,假,真))
# 2
# ((1, 1, 1, 0, 0), (1, 1, 1, 0, 0), (1, 1, 1, 0, 0), (0, 0, 0, 1, 1), (0, 0, 0, 1, 1))
# 2
# ((1, 0, 1, 0, 0), (0, 1, 0, 1, 0), (1, 0, 1, 0, 0), (0, 1, 0, 1, 0), (0, 0, 0, 0, 1))
# 3
同一算法的优化版如下所示(可读性较差,但更快,更容易翻译成其他语言):

def count_connected_组(adj):
n=len(形容词)
节点_至_检查=[i代表范围(n)]#[0,1,…,n-1]
计数=0
而n:
计数+=1
n-=1;节点=节点到检查[n]
相邻的=调整的[节点]
i=0
而i
这个问题是专门针对这种图形表示的,例如关于给出答案的一些奇特的矩阵操作吗?如果不是,则只收集集合中的所有节点,而不收集集合中某个节点的DFS,以获取该集合中可访问的所有节点,从集合中删除这些节点,并重复此操作,直到从其他某个节点访问完所有节点。相关,可能是重复的:我认为你的措辞意味着所有的传递关系都已经在你的邻接矩阵中表示为
1
s。我说得对吗?如果是这样,您可以使用我的算法(不需要DFS或类似算法)。