Panda062000
?>

На ПPython Поменять местами две диагонали Дан квадратный массив. Поменяйте местами в каждом столбце элементы, стоящие на главной и побочной диагонали. Входные данные В первой строке дано число n≤10. Далее идут n строк по n неотрицательных целых чисел не больше 100. Выходные данные ответ на задачу.

Информатика

Ответы

moskvichkabakery56

--- Python 3.7 ---

def MatrixRead(Rows, RowLength, ContType):

   for row in range(Rows):

       print('Enter line ' + str(row))

       buff = []

       [buff.append(ContType(input())) for _ in range(RowLength)]

       yield buff

       

def MatrixSwap(Matrix, OldPos:tuple, NewPos: tuple):

   Matrix[OldPos[0]][OldPos[1]], Matrix[OldPos[1]][OldPos[0]] = Matrix[NewPos[1]][NewPos[0]], Matrix[NewPos[0]][NewPos[1]]

   return Matrix

   

def MatrixPrint(Matrix, end = '\n'):

   for Row in Matrix:

       print(*Row, end ='\n')

   print(end)

   

   

def main():

   N = int(input()) #Matrix Size

   Matr =list( MatrixRead(N, N, int))

   MatrixPrint(Matr) #For check

   for row in range(N):

       for col in range(N):

           SecDiagPos = (row, N-col-1)

           MainDiagPos = (row, col)

           Matr = MatrixSwap(Matr, MainDiagPos, SecDiagPos)

   MatrixPrint(Matr)

   

if __name__ == '__main__':

   main()

Объяснение:

polotovsky
Учитывая, что 8 букв можно переставить примерно 40 тысячами можно просто запустить поиск в ширину, сохранить для всех перестановок то, из какой строчки они получились, и потом восстановить ответ для строчки abcdefgh.

Код на python 3:
from queue import Queue

to_process = Queue()
to_process.put(("edghcbfa", None))
prec = {}

while not to_process.empty():
    s, prev = to_process.get()
    if s in prec:
        continue
    for i in range(7):
        for j in range(i + 1, 8):
            if i == 0:
                next_s = s[j::-1] + s[j+1:]
            else:
                next_s = s[:i] + s[j:i-1:-1] + s[j+1:]
            if next_s not in prec:
                to_process.put((next_s, s))
    prec[s] = prev

current = "abcdefgh"
print(current)
while prec[current] is not None:
    current = prec[current]
    print(current)

Вывод программы:
abcdefgh
edcbafgh
edcbhgfa
edbchgfa
edghcbfa

Соответственно, ответ такой:
G B
B C
H A
E A
Терентьева
Учитывая, что 8 букв можно переставить примерно 40 тысячами можно просто запустить поиск в ширину, сохранить для всех перестановок то, из какой строчки они получились, и потом восстановить ответ для строчки abcdefgh.

Код на python 3:
from queue import Queue

to_process = Queue()
to_process.put(("edghcbfa", None))
prec = {}

while not to_process.empty():
    s, prev = to_process.get()
    if s in prec:
        continue
    for i in range(7):
        for j in range(i + 1, 8):
            if i == 0:
                next_s = s[j::-1] + s[j+1:]
            else:
                next_s = s[:i] + s[j:i-1:-1] + s[j+1:]
            if next_s not in prec:
                to_process.put((next_s, s))
    prec[s] = prev

current = "abcdefgh"
print(current)
while prec[current] is not None:
    current = prec[current]
    print(current)

Вывод программы:
abcdefgh
edcbafgh
edcbhgfa
edbchgfa
edghcbfa

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

На ПPython Поменять местами две диагонали Дан квадратный массив. Поменяйте местами в каждом столбце элементы, стоящие на главной и побочной диагонали. Входные данные В первой строке дано число n≤10. Далее идут n строк по n неотрицательных целых чисел не больше 100. Выходные данные ответ на задачу.
Ваше имя (никнейм)*
Email*
Комментарий*