Last active
April 16, 2023 06:15
-
-
Save Aisuko/7587b1cd4ad76f0bbfbc18f9c582e27c to your computer and use it in GitHub Desktop.
Revisions
-
Aisuko revised this gist
Apr 16, 2023 . 1 changed file with 2 additions and 2 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 @@ -57,7 +57,7 @@ def shortest_path(self, s, t): visited=[False for _ in range(self.n)] queue=[s] visited[s]=True prev=[None for _ in range(self.n)] while queue: u=queue.pop(0) for v in self.adj[u]: @@ -78,7 +78,7 @@ def get_path(self,prev,s,t): if prev[t] is not None or s==t: while t is not None: res.insert(0,t) t=prev[t] return res if __name__ == '__main__': -
Aisuko revised this gist
Apr 16, 2023 . 1 changed file with 34 additions and 35 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 @@ -47,40 +47,40 @@ def dfs(self, s): return visited # function for finding the shortest path for the graph def shortest_path(self, s, t): """ shortest path s: start node t: end node return: the shortest path """ visited=[False for _ in range(self.n)] queue=[s] visited[s]=True prev=[None for _ iin range(self.n)] while queue: u=queue.pop(0) for v in self.adj[u]: if not visited[v]: queue.append(v) visited[v]=True prev[v]=u return self.get_path(prev,s,t) def get_path(self,prev,s,t): """ get the path prev:previous node s; start node t: end node return: the path """ res=[] if prev[t] is not None or s==t: while t is not None: res.insert(0,t) t=prev(t) return res if __name__ == '__main__': g = Graph(6) g.add_edge(0, 1) @@ -93,6 +93,5 @@ def get_path(self, prev, s, t): g.add_edge(4, 5) print(g.bfs(0)) print(g.dfs(0)) print(g.shortest_path(0,5))
-
Aisuko revised this gist
Apr 16, 2023 . No changes.There are no files selected for viewing
-
Aisuko revised this gist
Apr 16, 2023 . 1 changed file with 52 additions and 11 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 @@ -4,7 +4,9 @@ class Graph: def __init__(self, n): # n is the number of nodes self.n=n # adj is the adjacency list self.adj=[[] for _ in range(n)] def add_edge(self, u, v): self.adj[u].append(v) @@ -43,15 +45,54 @@ def dfs(self, s): stack.append(v) visited[v]=True return visited # function for finding the shortest path for the graph def shortest_path(self, s, t): """ shortest path :param s: start node :param t: end node :return: the shortest path """ visited = [False for _ in range(self.n)] queue = [s] visited[s] = True prev = [None for _ in range(self.n)] while queue: u = queue.pop(0) for v in self.adj[u]: if not visited[v]: queue.append(v) visited[v] = True prev[v] = u return self.get_path(prev, s, t) def get_path(self, prev, s, t): """ get the path :param prev: previous node :param s: start node :param t: end node :return: the path """ res = [] if prev[t] is not None or s == t: while t is not None: res.insert(0, t) t = prev[t] return res if __name__ == '__main__': g = Graph(6) g.add_edge(0, 1) g.add_edge(0, 2) g.add_edge(1, 2) g.add_edge(1, 3) g.add_edge(2, 4) g.add_edge(3, 4) g.add_edge(3, 5) g.add_edge(4, 5) print(g.bfs(0)) print(g.dfs(0)) # testcase for shortest path print(g.shortest_path(0, 5))
-
Aisuko revised this gist
Apr 16, 2023 . 1 changed file with 1 addition and 1 deletion.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 @@ -17,7 +17,7 @@ def bfs(self,s): return: visited nodes """ visited=[False for _ in range(self.n)] queue=[s] visited[s]=True while queue: u=queue.pop(0) -
Aisuko created this gist
Apr 16, 2023 .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,57 @@ #! usr/local/bin python3 # implementation for graph algorithms class Graph: def __init__(self, n): self.n=n self.adj=[[] for _ in range(n)] def add_edge(self, u, v): self.adj[u].append(v) self.adj[v].append(u) def bfs(self,s): """ breadth first search s: start node return: visited nodes """ visited=[False for _ in range(self.n)] queu=[s] visited[s]=True while queue: u=queue.pop(0) for v in self.adj[u]: if not visited[v]: queue.append(v) visited[v]=True return visited def dfs(self, s): """ depth first search s:start node return: visited nodes """ visited =[False for _ in range(self.n)] stack=[s] visited[s]=True while stack: u=stack.pop() for v in self.adj[u]: if not visited[v]: stack.append(v) visited[v]=True return visited g = Graph(6) g.add_edge(0, 1) g.add_edge(0, 2) g.add_edge(1, 2) g.add_edge(1, 3) g.add_edge(2, 4) g.add_edge(3, 4) g.add_edge(3, 5) g.add_edge(4, 5) print(g.bfs(0)) print(g.dfs(0))