Breadth ก่อการค้นหาๆ

0

คำถาม

ฉันกำลังสร้าง 8 ปริศนา AI แข่งขันกันใน bfs และมันเสมอต้องไปนอนๆ, ฉันใช้มีคิวต้องเก็บพยายามหาดู(ยังไม่ใช่ตอนไปเยี่ยมโหนดต่างๆ)และรายการเก็บคนพยายามหาดูและไปเยี่ยมโหนดต่างๆเพื่อหลีกเลี่ยงไปเยี่ยมเหมือนของรัฐหลายครั้งแล้วก็ข้อความด่วนทันใจใช้ getNextStates ฟังก์ชัน()จะเอาของที่เป็นไปได้ต่ออเมริกาขึ้นอยู่กับตำแหน่งข"0",สลับ()ต้องรับผิดชอบสำหรับสร้างต่อไปของรัฐของฉันรหัส:

goalState=[0, 1, 2, 3, 4, 5, 6, 7, 8]
def switch(list,index1,index2):
    newList=[]
    for i in range(len(list)):
        newList.append(list[i])

    temp=newList[index1]
    newList[index1]=newList[index2]
    newList[index2]=temp
    return newList

def getNextStates(state):
    nextStates=[]
    length=len(state)
    emptyTile=0
    for i in range(length):
        if state[i]==0:
            emptyTile=i
            #    1
            # 0  3
    print('empty tile in position : ' , emptyTile)
    if emptyTile==0:
        nextStates.append(switch(state,0,1))
        nextStates.append(switch(state, 0, 3))
    elif emptyTile==1:
        nextStates.append(switch(state, 1, 0))
        nextStates.append(switch(state, 1, 4))
        nextStates.append(switch(state, 1, 2))
    elif emptyTile==2:
        nextStates.append(switch(state, 2, 1))
        nextStates.append(switch(state, 2, 5))
    elif emptyTile==3:
        nextStates.append(switch(state, 3, 0))
        nextStates.append(switch(state, 3, 4))
        nextStates.append(switch(state, 3, 6))
    elif emptyTile==4:
        nextStates.append(switch(state, 4, 3))
        nextStates.append(switch(state, 4, 1))
        nextStates.append(switch(state, 4, 5))
        nextStates.append(switch(state, 4, 7))
    elif emptyTile==5:
        nextStates.append(switch(state, 5, 2))
        nextStates.append(switch(state, 5, 4))
        nextStates.append(switch(state, 5, 8))
    elif emptyTile==6:
        nextStates.append(switch(state, 6, 3))
        nextStates.append(switch(state, 6, 7))
    elif emptyTile==7:
        nextStates.append(switch(state, 7, 6))
        nextStates.append(switch(state, 7, 4))
        nextStates.append(switch(state, 7, 8))
    else:
        nextStates.append(switch(state, 8, 7))
        nextStates.append(switch(state, 8, 5))

    return nextStates


def breadthFirst(initialState,goal):
    global exploredCount , visitedCount
    exploredCount = 1
    visitedCount = 0
    frontier = []
    frontier.append(initialState)
    explored=[]
    print("Staring Dequing....")
    while len(frontier) > 0:
        print(len(frontier))
        state=frontier.pop(0)
        print("dequed : " , state)
        explored.append(state)
        print("appended in explored and visitedCount incremented")
        visitedCount += 1
        if state==goal:
            print("State Is Accomplished")
            return state
        nextStates=getNextStates(state)
        print("possible Next States : " , nextStates)
        for i in range(len(nextStates)):
            print('Checking Child states , current : ' , nextStates[i])
            if  not nextStates[i] in explored:
                if not nextStates[i] in frontier:
                    print("not in visited or explored , enqueue")
                    frontier.append(nextStates[i])
                    exploredCount += 1
 
    return initialState
1

คำตอบที่ดีที่สุด

1

ประเด็นนั้นมันเริ่มต้นอเมริกาซึ่ง unsolvable ถ้านี่เป็นคดีที่อัลกอริธึมจะเก็บสำรวจในๆ. ทางออกที่ถูกต้องนับจำนวนของ inversions(ที่ว่างเปล่าหั่นชิ้นเรียงต่อเนื่องไม่ได้รวม)และถ้ามันแปลกแล้วมัน unsolvable ถ้ามันถึงตอนนั้นมัน solvable นนี้ทรัพยากรได้ช่วยให้ฉันเข้าใจ: https://www.cs.princeton.edu/courses/archive/fall12/cos226/assignments/8puzzle.html

2021-11-24 13:01:43

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่