Commit 415582e0 authored by Ing. Petr Pauš, Ph.D.'s avatar Ing. Petr Pauš, Ph.D.
Browse files

merge sort a damy na sachovnici

parent ff9dde07
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
def merge(A, B, start:int, mid:int, end:int):
    i = start
    j = mid

    for k in range(start, end):
        if i<mid and (j>=end or A[i] <= A[j]):
            B[k] = A[i]
            i += 1
        else:
            B[k] = A[j]
            j += 1


def merge_sort(A):
    B = A[:]
    L = 1
    N = len(A)

    while L < N:
        for start in range(0, N, 2*L):
            mid = min(start+L, N)
            end = min(start+2*L,N)
            merge(A, B, start, mid, end)
        A = B[:]
        print(A)
        L = L*2
    return A

A = [1,3,5,8,4,7,1,3,5,8,7,1,9,8,1,4,7,5,1,7,1,3,4,7,8]
print(A)
B = merge_sort(A)
print(B)
 No newline at end of file
+34 −0
Original line number Diff line number Diff line

def merge(A, B, start:int, mid:int, end:int):
    i = start
    j = mid

    for k in range(start, end):
        if i < mid and (j>=end or A[i] <= A[j]):
            B[k] = A[i]
            i += 1
        else:
            B[k] = A[j]
            j += 1

def merge_sort(A:list)->list:
    N = len(A)
    #B = [0 for i in range(N)]
    B = A[:]

    L = 1
    while L < N:
        for start in range(0, N, 2*L):
            mid = min(start+L, N)
            end = min(start+2*L, N)
            merge(A, B, start, mid, end)
        A = B[:]  # kopie B do A
        print(A)
        L = 2*L
    return A

A = [5,3,7,1,8,0,4,2,6,5,4]

print(C)
B = merge_sort(C)
print(B)
+50 −0
Original line number Diff line number Diff line
def is_ok(row:int, col:int, board, N) -> bool:
    for x in board[row]:
        if x == 1:
            return False
    
    i = row
    j = col

    while i>=0 and j>=0:
        if board[i][j] == 1:
            return False
        i -= 1
        j -= 1

    i = row
    j = col

    while j>=0 and i<N:
        if board[i][j] == 1:
            return False
        i += 1
        j -= 1

    return True



def Q(col:int, board, N:int)->bool:
    if col == N:
        return True
    for row in range(N):
        if is_ok(row, col, board, N):
            board[row][col] = 1
            if Q(col+1, board, N):
                return True
            board[row][col] = 0
    return False

def print_solution(board, N):
    for x in board:
        print(x)


N = 8

board = [ [0 for i in range(N)] for j in range(N) ]

Q(0,board, N)

print_solution(board, N)
 No newline at end of file
+47 −0
Original line number Diff line number Diff line

def is_valid(row:int, col:int, board, N) -> bool:
    for i in range(col):
        if board[row][i]==1:
            return False
    
    i = row
    j = col

    while i>=0 and j>=0:
        if board[i][j]==1:
            return False
        i -= 1
        j -= 1

    i = row
    j = col

    while i<N and j>=0:
        if board[i][j]==1:
            return False
        i += 1
        j -= 1

    return True

def Queens(col:int, board, N)->bool:
    if col == N:
        return True
    
    for row in range(N):
        if is_valid(row, col, board, N):
            board[row][col] = 1
            if Queens(col+1, board, N):
                return True
            board[row][col] = 0
    return False

def print_solution(board, N):
    for row in board:
        print(row)

N = 8
board = [ [0 for i in range(N)] for j in range(N) ]
if Queens(0, board, N):
    print_solution(board, N)