[Вопрос] Теперь вы должны выбрать ХОД в общей сложности п, обозначаемый 0 до п-1.
Нужны некоторые курсы Advanced Placement перед выборным наверняка. Например, вы хотите изучать курсы 0, вам необходимо заполнить Урок 1, мы используем спичку , чтобы представить их: [0,1]
к общей сумме с учетом курсов и их предпосылок, вы узнаете , чтобы вернуться к завершению всех курсов , запланированных заказ.
Там может быть несколько в правильном порядке, до тех пор , как вы возвращаетесь к одному виду его. Если это невозможно , чтобы завершить все курсы, он возвращает пустой массив.
Пример 1 : Входной сигнал: 2 , [[ 1 , 0 ]] Выход: [ 0 , 1 ] Пояснение: В общей сложности 2 курсов. Для изучения курсов 1 , вам необходимо пройти курс 0 . Таким образом, правильная последовательность курса [ 0 , 1 ]. Пример 2 : Входной сигнал: 4 , [[ 1 , 0 ], [ 2 , 0 ], [ 3 , 1 ], [ 3 , 2 ]] Выход: [ 0 , 1 , 2 ,3 ] или [ 0 , 2 , 1 , 3 ]
Объяснение: Есть четыре курса. Чтобы узнать Урок 3, вы должны завершить курс 1 и 2 курса. 1 и 2 курсы и курсы должны быть ранжированы после курса 0.
Таким образом, правильная последовательность курса [0,1,2,3]. Другой тип является правильным [0,2,1,3].
Описание:
Предпосылки ввод модель представлена в списке края, а не матрицы смежности. Пожалуйста , обратитесь к рисунку представления.
Можно предположить , что предпосылки не являются дубликатом бокового входа.
[Мышление]
Обзор топологической сортировки, LeetCode 207 по сравнению с предыдущей темой, но эта тема должна записывать последовательность обучения для каждого курса. На самом деле, каждый раз, когда требуется найти топологический рода нулевого порядка, который вдавливается в каждом узле в очередях, так что массив узлов в разрешении.
Но можно выучить этот приказ никогда не существовало, так что нам нужно посчитать количество записей, если длина разрешения и сосчитать то же самое, он возвращает Рез массива, в противном случае он возвращает пустой массив.
класс Решение { общественный : вектор < INT > findOrder ( INT numCourses, вектор <вектор < ИНТ >> & предпосылками) { карта < ИНТ , набор < ИНТ >> adjects; вектор < INT > (полустепень заход numCourses, 0 ); для (авто и края: предпосылки) { Int а = край [ 0 ]; INT б = ребро [ 1 ]; adjects [Ь] .Вставьте (а); полустепень захода [а] ++ ; } очереди < INT > TODO; вектор < ИНТ > Рез; для ( INT I = 0 ; я <numCourses; я ++ ) { если (! todo.push (я) полустепень захода [я]); } INT кол = 0 ; в то время как (! todo.empty ()) { кол ++ ; INT v = todo.front (); todo.pop (); res.push_back (v); для (авто прил: adjects [v]) { полустепени захода [ADJ] - ; если (! полустепень захода [ADJ]) todo.push (прил); } } Если (res.size () == numCourses) возвращение Рез; еще возвращение {}; } };