def bfsreduceall(sudokuObject): source = sudokuObject.solutiondriverNoGuess() if source == "Bad Response": return None elif type(source) is Sudoku: return source Q = Queue([sudokuObject]) loop = 1 startminnodes = None while not Q.isempty(): # print("loop no",loop) if loop > 2: return dfsreduceall(sudokuObject) # if startminnodes is not None: # for node in startminnodes:print(node.allowedset,node.id) # print("Q.unqueue()",Q) v = Q.unqueue() unfnodes = v.getOrderedMinnodesUnfilled() # unfinished nodes if loop == 1: startminnodes = unfnodes for minnode in unfnodes: for permutedvalue in minnode.allowedset: global numsudokuobjects numsudokuobjects += 1 newsudokuObject = sudokuObject.__deepcopy__() newsudokuObject.nodes[minnode.id].setValue(permutedvalue) postsolveobject = newsudokuObject.solutiondriverNoGuess() if type(postsolveobject) is Sudoku: return postsolveobject elif postsolveobject != "Bad Response": Q.enqueue(newsudokuObject) loop += 1 return None
def BFS(mygraph,source,group = None): mygraph.nodes[source].explored = True mygraph.nodes[source].layer = 0 mygraph.nodes[source].group = group Q = Queue([source]) while Q.isempty() == False: v = Q.unqueue() for secondnode in mygraph.graph_dict[v]: if mygraph.nodes[secondnode].explored == False: mygraph.nodes[secondnode].explored = True mygraph.nodes[secondnode].layer = mygraph.nodes[v].layer + 1 mygraph.nodes[secondnode].group = group Q.enqueue(secondnode) return mygraph