#START_TIME_ 16.03.12 PM 11:27
#lan : Python 3.5.1
 
Map = [[0]*8 for x in range(8)]

no = 0

def printMap():
    global no
    no += 1
    print('NO.',no)
    global Map
    for x in range(8):
        for y in range(8):
            a = {0:'-', 1:'Q'}
            print(a[Map[x][y]], end=' ')
        print('')
    return

def is_queen_there_check(floor, point):
    global Map
    a, b = floor, point

    col = [ Map[x][b] for x in range(8)] # 세로
    if 0 < sum(col): return

    ang = [ Map[a-x][b-x] for x in range(min(b+1,a+1)) ] #왼대각
    if 0 < sum(ang): return

    ang = [ Map[a-x][b+x] for x in range(min(8-b,a+1)) ] #오른대각
    if 0 < sum(ang): return

    if a+1 == 8:
        Map[a][b] = 1
        printMap() #8층이면 인쇄
        Map[a][b] = 0
        return

    Map[a][b] = 1
    for x in range(8):
        is_queen_there_check(a+1,x) #그냥 돌려라.
    Map[a][b] = 0
    
for x in range(8):
    is_queen_there_check(0,x)

#Error1 : INF_LOOP PM 11:46, All Reset #코드 작성 다시 시작
#Error2 : 같은 거 8번 인쇄, PM 12:05
#Error3 : 467개? PM 12:13

#92개 체크 완료
#END TIME : 16.03.13 PM 12:15

정말 많이 공부해야겠다.
52 lines, 주석 다 날리면 42 lines 인데 무슨 상관이야!

가장 눈에 들어오는 문제점이라면, 수치 착각, 반복문의 범위.
Retrieved from http://wiki.zeropage.org/wiki.php/EightQueenProblem/김해천
last modified 2021-02-07 05:23:11