Java – find the largest connected component in the adj matrix graph?
•
Java
I try to find a way to find the largest connected component in adj matrix graph For example:
0000000110 0001100000 0000000000 0100000010 0100000100 0000000100 0000000000 1000110000 1001000000 0000000000
I have asked Google this question and am trying to find anything. I have also read wiki articles on graph theory and am not happy I think they must be an algorithm to solve this problem Anyone can point me in the right direction and give me some instructions. What should I do to solve this problem?
Solution
Choose a starting point and start "walking" to other nodes until you are exhausted Perform this operation before all components are found This will run in O (n), where n is the size of the graph
Framework of Python solution:
class Node(object): def __init__(self,index,neighbors): self.index = index # A set of indices (integers,not Nodes) self.neighbors = set(neighbors) def add_neighbor(self,neighbor): self.neighbors.add(neighbor) class Component(object): def __init__(self,nodes): self.nodes = nodes self.adjacent_nodes = set() for node in nodes: self.adjacent_nodes.add(node.index) self.adjacent_nodes.update(node.neighbors) @property def size(self): return len(self.nodes) @property def node_indices(self): return set(node.index for node in self.nodes) @property def is_saturated(self): return self.node_indices == self.adjacent_nodes def add_node(self,node): self.nodes.append(node) self.adjacent_nodes.update(node.neighbors) adj_matrix = [[0,1,0],[0,[1,0]] matrix_size = len(adj_matrix) nodes = {} for index in range(matrix_size): neighbors = [neighbor for neighbor,value in enumerate(adj_matrix[index]) if value == 1] nodes[index] = Node(index,neighbors) components = [] index,node = nodes.popitem() component = Component([node]) while nodes: if not component.is_saturated: missing_node_index = component.adjacent_nodes.difference(component.node_indices).pop() missing_node = nodes.pop(missing_node_index) component.add_node(missing_node) else: components.append(component) index,node = nodes.popitem() component = Component([node]) # Final component needs to be appended as well components.append(component) print max([component.size for component in components])
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码