Что не так в коде (Python3)? Некоторый завод умеет производить N=100000 различных видов деталей. В каталоге деталей, которые могут быть произведены на этом заводе, все они пронумерованы числами от 1 до N
. При этом для производства некоторых деталей сначала нужно произвести какие-то другие детали. При этом детали «не расходуются», например, если для производства детали номер 6 нужны детали номер 7 и 8, а для производства детали номер 7 также нужна деталь номер 8, то для производства детали номер 6 нужно произвести детали номер 8, 7, 6 (деталь номер 8 будет использована и для производства детали номер 7, и для производства детали номер 6) по одному разу. То есть каждую деталь из каталога нужно произвести не более одного раза, или вообще можно не производить, если она не требуется.
Необходимо произвести деталь номер 1. Определите, какое наименьшее число деталей (суммарно, включая саму деталь номер 1) нужно произвести для этого, с учетом всех необходимых зависимостей.
Входные данные
Первая строка входных данных содержит число n
, (1≤n≤100000). Каждая из последующих n строк входного файла описывает характеристики производства деталей. Здесь i-я строка содержит список деталей, которые требуются для производства детали с номером i
. В списке нет повторяющихся номеров деталей. Список может быть пустым: тогда ему будет соответствовать пустая строка!
Суммарно во всех списках содержится не более 200000 элементов. Гарантируется, что не существует циклических зависимостей в производстве деталей.
Выходные данные
Программа должна вывести одно натуральное число — минимальное количество деталей, которые должен произвести завод для производства детали номер 1.
ПРИМЕР
ввод
6
3 6
4
2 6
4
вывод
4
Для производства детали 1 нужны детали 3 и 6, каждая из них требует для производства деталь 4. Итого нужно произвести 4 детали (1, 3, 6, 4), детали 2 и 5 производить не нужно.def do(n):
global k, tot
tot.append(n)
k += 1
for i in range(len(arr[n-1])):
if arr[n-1][i] in tot:
pass
else:
do(arr[n-1][i])
tot = []
k = 0
n = int(input())
arr = [0]*n
for i in range(n):
arr[i] = list(map(int,input().split()))
do(1)
print(k)
Partial Solution. Your score is = 24, 24/29 tests passed
Какие тесты не подходят?

21 Авг 2019 в 06:29
214 +1
0
Ответы
1

Недостающая часть кода - это подсчет того, сколько из деталей в зависимостях уже было произведено до того, как они понадобились для производства другой детали. Для этого можно создать дополнительный список, в котором будут отмечаться уже произведенные детали. Например, если деталь №3 нужна для производства детали №6, а деталь №3 уже была произведена, то деталь №3 не нужно производить еще раз для производства детали №6.

Ниже приведен исправленный код:

def do(n):
global k
visited[n] = True
for i in range(len(arr[n-1])):
if not visited[arr[n-1][i]]:
do(arr[n-1][i])
k += 1
k = 0
n = int(input())
arr = [0]*n
visited = [False]*(n+1)
for i in range(n):
arr[i] = list(map(int,input().split()))
do(1)
print(k)

Этот исправленный код должен решить проблему и пройти все тесты.

20 Апр 2024 в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир