1. 程式人生 > >一些有趣的演算法/圖論問題

一些有趣的演算法/圖論問題

1.選課問題:

  • 在某個大學中,同學A要選課,不過,這些課有一些依賴關係。如:要學習區塊鏈基礎 課,需要先學習 演算法基礎--DAG問題 。(僅僅是舉例)同學A一共有10^7門課要選擇,請愛好程式設計的你編寫一個程式,使得可以在一秒內輸出一種選課的順序。如果不能選課(比如:學習課程A需要先學習B 學習B需要先學習A),輸出:Impossible
  • 思路:輸入課程之間的關係後,進行拓撲排序即可。

2.三角戀問題:

  • 給定一些人,人與人之間有一些關係。比如:A喜歡B B喜歡C。在本問題中,只有一種關係(假設為--喜歡)。在本問題中,如果A喜歡B B喜歡C,那麼C被喜歡的程度視為2。給定一些關係,試求被喜歡的程度最高的人。如果有一些人被喜歡的程度相同,按字典序輸出這些人(格式:"A B C"),如果存在三角戀關係,如:A->B->C->A,輸出:"Impossible".
  • 思路:首先,建圖。建圖完畢後,進行一次拓撲排序,並設立一個vis陣列,用於儲存是否訪問過本結點。在拓撲排序中,順便判斷vis是否為1,如果為1則輸出Impossible。在Possible的時候,將合法的點存到一個priority_queue中,並建立一個具有權值的Node。在程式執行完畢後,輸出priority_queue的內容即可。