<prompt> Kuna jumla ya kozi za numCourses unazopaswa kuchukua, zilizo na lebo kutoka 0 hadi numCourses - 1. Umepewa safu masharti ambapo mashartii ai, bi inaonyesha kuwa lazima kuchukua mkondo bi kwanza ikiwa unataka kuchukua kozi ai. Kwa mfano, jozi 0, 1, inaonyesha kuwa ili kuchukua kozi 0 lazima kwanza uchukue kozi 1.Rejesha kweli ikiwa unaweza kumaliza kozi zote. Vinginevyo, rudisha false.Mfano wa 1:Ingizo: numCourses 2, sharti 1,0Pato: kweliMaelezo: Kuna jumla ya kozi 2 za kuchukua.Ili kuchukua kozi ya 1 unapaswa kuwa umemaliza kozi 0. Kwa hivyo inawezekana.Mfano wa 2:Ingizo: numCourses 2, sharti 1,0,0,1Pato: si kweliMaelezo: Kuna jumla ya kozi 2 za kuchukua.Ili kuchukua kozi ya 1 unapaswa kuwa umemaliza kozi ya 0, na kuchukua kozi ya 0 unapaswa pia kuwa umemaliza kozi ya 1. Kwa hiyo haiwezekani.Vikwazo: 1 numCourses 2000 0 prerequisites.length 5000 mashartii.urefu 2 0 ai, bi numCourses Masharti yote ya jozii ni kipekee.  <response>: chatukutoka kwa makusanyo leta defaultdict, dequedef canFinishnumCourses, prerequisites: adj defaultdictorodha inDegree 0 numCourses kwa a, b katika sharti: adjb.ongezaa inDegreea 1 q dequei for i in rangenumCourses if inDegreei0 wakati q: currCourse q.popleft numCourses - 1 kwa nextCourse in adjcurrCourse: inDegreenextCourse - 1 ikiwa inDegreenextCourse 0: q.ongezaKozi inayofuata kurudi nambaKozi 0maelezoAlgorithm hutumia mbinu ya upangaji wa kitopolojia kwa kutumia Algorithm ya Kahn kutatua tatizo hili. Tunadumisha orodha ya mkabala ili kuwakilisha grafu na orodha ya digrii-mwezi kwa kila kipeo kozi Weka alama kwenye vipeo kwa kiwango cha 0 na uziongeze kwenye foleni hizi ni kozi za kuanzia. Kisha, tunasindika kila nodi kozi kwenye foleni, kupungua kwa digrii za majirani zao kozi wanazofungua. Ikiwa kiwango cha ndani cha jirani yoyote kinakuwa 0, kiongeze kwenye foleni. Mwishowe, ikiwa tumeshughulikia kozi zote, rudi kweli; vinginevyo, rudisha sivyo ikiwa kozi yoyote haijachakatwa. 