Как создать матрицу с движущимися элементами?

avatar
worldCurrencies
8 августа 2021 в 23:34
56
1
0

Я пытаюсь создать код для матрицы 8x8, заполненной нулями, кроме [1,1] и [8,8]. Эти значения будут равны 1. Затем я хочу, чтобы единицы в каждом углу могли перемещаться вверх, вниз, влево, вправо, пока они находятся в матрице. Я хотел бы узнать, сколько ходов нужно сделать, чтобы единицы пересеклись друг с другом.

Я понимаю, что мне нужно сделать 2 массива, но не знаю, как это запрограммировать.

Источник
Mike 'Pomax' Kamermans
8 августа 2021 в 23:59
1

Если вы можете описать его, вы можете начать кодировать его: какой код вы уже придумали?

sahasrara62
9 августа 2021 в 00:15
0

bfs — хорошая точка для начала

Ответы (1)

avatar
instance
9 августа 2021 в 00:52
0

Вы можете использовать цикл for для создания такой матрицы:

matrix = []

for x in range(8):
    matrix.append([])
    for y in range(8):
        matrix[x].append(0)

Затем вы можете изменить матрицу[1][1] и матрицу[8][8] на 1. Однако я почти уверен, что вы имели в виду матрицу[0][0] и матрицу[7][7], потому что индексация списка начинается с [0].

matrix[0][0] = 1
matrix[7][7] = 1

Чтобы переместить единицы по матрице, вы можете создать функцию с именем move() и затем запомнить позиции единиц в переменных

posX = [0, 7]
posY = [0, 7]

#argument dirn, 0 = right, 1 = left, 2 = up, 3 = down
#argument one, gives which one you want to move

def move(dirn, one):
   if dirn == 0 and posX[one] < 7:
      matrix[posX[one]][posY[one]] = 0
      matrix[posX[one] + 1][posY[one]] = 1
      posX[one] = posX[one] + 1

   if dirn == 1 and posX[one] > 0:
      matrix[posX[one]][posY[one]] = 0
      matrix[posX[one] - 1][posY[one]] = 1
      posX[one] = posX[one] - 1

   if dirn == 2 and posY[one] < 7:
      matrix[posX[one]][posY[one]] = 0
      matrix[posX[one]][posY[one] + 1] = 1
      posY[one] = posY[one] + 1

   if dirn == 3 and posY[one] > 0:
      matrix[posX[one]][posY[one]] = 0
      matrix[posX[one]][posY[one] - 1] = 1
      posY[one] = posY[one] - 1

Вы можете узнать, сколько ходов нужно сделать, чтобы единицы пересеклись друг с другом, добавляя 1 к переменной каждый раз, когда вы делаете ход. Затем проверьте, не пересекаются ли они друг с другом.

moves = 0
while not [posX[0], posY[0]] == [posX[1], posY[1]]:
   #make a move
   moves += 1

Общее количество сделанных ходов будет переменной по ходу после завершения процесса. Выведите значение переменной moves после цикла while.

print(moves)
worldCurrencies
10 августа 2021 в 15:30
0

Привет! Спасибо за это ... я пытался запустить его, но не смог выполнить его из-за цикла while; пытаемся понять, как ускорить процесс

instance
10 августа 2021 в 21:06
0

Какую проблему вызывает цикл while? Обычно проблема в том, что это никогда не заканчивается. Чтобы предотвратить замедление при использовании плохих ходов (ходов, которые никогда не приводят к пересечению друг друга), добавьте ограничение на перемещение, скажем, 1000, чтобы цикл while автоматически завершался при задании плохих ходов.

worldCurrencies
12 августа 2021 в 02:13
0

Я понимаю! Как здесь используется функция move()?