Last active
June 12, 2024 12:57
-
-
Save anilpai/940f911d8cf838ffeb98ddf23fee0ce3 to your computer and use it in GitHub Desktop.
Revisions
-
anilpai revised this gist
Jun 12, 2024 . 1 changed file with 13 additions and 12 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,19 +8,19 @@ def add_edge(self, node, neighbour): self.graph[node].append(neighbour) self.graph[neighbour].append(node) def zero_degree_nodes(self, node): return self.graph[node] def first_degree_nodes(self, node): first_degree_nodes = set() zero_degree_nodes = self.zero_degree_nodes(node) for zero_degree_node in zero_degree_nodes: first_degree_nodes.update(self.zero_degree_nodes(zero_degree_node)) first_degree_nodes.difference_update(zero_degree_nodes) # remove first-degree nodes first_degree_nodes.discard(node) # remove the node itself if present return list(first_degree_nodes) g = Graph() g.add_edge('A', 'B') g.add_edge('A', 'C') @@ -29,5 +29,6 @@ def second_degree_nodes(self, node): g.add_edge('C', 'F') g.add_edge('F', 'G') print("Zero degree nodes of A:", g.zero_degree_nodes('A')) # ['B', 'C'] print("First degree nodes of A:", g.first_degree_nodes('A')) # ['D', 'E', 'F'] -
anilpai created this gist
Jun 12, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,33 @@ from collections import defaultdict class Graph: def __init__(self): self.graph = defaultdict(list) def add_edge(self, node, neighbour): self.graph[node].append(neighbour) self.graph[neighbour].append(node) def first_degree_nodes(self, node): return self.graph[node] def second_degree_nodes(self, node): second_degree_nodes = set() first_degree_nodes = self.first_degree_nodes(node) for first_degree_node in first_degree_nodes: second_degree_nodes.update(self.first_degree_nodes(first_degree_node)) second_degree_nodes.difference_update(first_degree_nodes) # remove first-degree nodes second_degree_nodes.discard(node) # remove the node itself if present return list(second_degree_nodes) # Usage g = Graph() g.add_edge('A', 'B') g.add_edge('A', 'C') g.add_edge('B', 'D') g.add_edge('B', 'E') g.add_edge('C', 'F') g.add_edge('F', 'G') print("First degree nodes of A:", g.first_degree_nodes('A')) # ['B', 'C'] print("Second degree nodes of A:", g.second_degree_nodes('A')) # ['D', 'E', 'F']