From 97fd1e4bea928602e21f28a049b008a5b5d6fb5c Mon Sep 17 00:00:00 2001 From: zhaoliu Date: Sat, 22 Sep 2018 22:02:54 +0800 Subject: [PATCH] Add more code. --- other/breadthsearch.py | 31 +++++++++++++++++++++ other/dijkstra | 61 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 other/breadthsearch.py create mode 100644 other/dijkstra diff --git a/other/breadthsearch.py b/other/breadthsearch.py new file mode 100644 index 00000000..be57d99e --- /dev/null +++ b/other/breadthsearch.py @@ -0,0 +1,31 @@ +graph = {} +graph["you"] = ["alice", "bob", "claire"] +graph["bob"] = ["anuj", "peggy"] +graph["alice"] = ["peggy"] +graph["claire"] = ["thom", "jonny"] +graph["anuj"] = [] +graph["peggy"] = [] +graph["thom"] = [] +graph["jonny"] = [] + +def person_is_seller(name): + return name[-1] =='m' + +def search(name): + search_queue = deque() + search_queue += graph[name] + searched = [] + while search_queue: + person = search_queue.popleft() + if not person in searched: + if person_is_seller(person): + print person + " is a mango seller!" + return True + else: + search_queue += graph[person] + searched.append(person) + return False + +from collections import deque +search("you") + diff --git a/other/dijkstra b/other/dijkstra new file mode 100644 index 00000000..cb5efc69 --- /dev/null +++ b/other/dijkstra @@ -0,0 +1,61 @@ +graph = {} +infinity = float("inf") +graph["start"] = {} +graph["start"]["a"] = 6 +graph["start"]["b"] = 2 +graph["start"]["c"] = infinity + +graph["a"] = {} +graph["a"]["c"] = 4 +graph["b"] = {} +graph["b"]["a"] = 3 +graph["b"]["fin"] = infinity +graph["b"]["c"] = 8 + +graph["c"] = {} +graph["c"]["fin"] = 6 + +graph["fin"] = {} + +costs = {} +costs["a"] = 6 +costs["b"] = 2 +costs["c"] = infinity +costs["fin"] = infinity + +parents = {} +parents["a"] = "start" +parents["b"] = "start" +parents["fin"] = "c" +parents["c"] = "a" +parents["c"] = "b" + +processed = [] + + +def find_lowest_cost_node(costs): + lowest_cost = float("inf") + lowest_cost_node = None + for node in costs: + cost = costs[node] + if cost < lowest_cost and node not in processed: + lowest_cost = cost + lowest_cost_node = node + return lowest_cost_node + + +node = find_lowest_cost_node(costs) +while node is not None: + cost = costs[node] + neighbors = graph[node] + for n in neighbors.keys(): + new_cost = cost + neighbors[n] + if costs[n] > new_cost: + costs[n] = new_cost + parents[n] = node + processed.append(node) + node = find_lowest_cost_node(costs) + +print("Cost from the start to each node:") +print(costs) +print(parents)