Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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