各種面試題 任務排程 拓排序

2021-06-18 10:03:52 字數 841 閱讀 7449

有n個任務需要完成(編號1到n),任務之間有一些依賴關係,如果任務a依賴於任務b和c,那麼只有當任務b和任務c完成之後才能完成任務a。給定所有的依賴關係,判斷這些任務是否能夠完成。如果能夠完成,請給出乙個合法的任務完成序列。

樣例:n=5

1->2,3

3->4

上述樣例中任務1依賴於任務2和任務3,任務3依賴於任務4,那麼存在合法的任務完成序列4,3,2,1,5

讀完題就發現是個拓撲排序,直接上模板吧!但是注意it=map.find()之後有可能為空的,直接connect=it->second就報錯了。

typedef int jobid;

/* * deps[id]表示任務id所依賴的任務

* 如果存在合法的任務完成序列,返回true,否則返回false

* 合法的任務序列請存放在引數result中(已經分配空間,不需要push_back)

*/bool dfs(int u,const map>& deps,vector& result,int& tail,vector& vis);

bool jobschedule(const map> &deps, int n,

vector&result)

bool dfs(int u,const map>& deps,vector& result,int& tail,vector& vis)

{ vis[u]=-1;

map>::const_iterator it = deps.find(u);

if ( it !=deps.end() )

{ const vector& connect=it->second;

for(int i=0;i

各種面試題 大數乘法

上次同學在微軟就面到這個了。比較煩的是處理符號。有兩個注意的 第乙個是中間儲存結果要用vector不能用string,否則會溢位。二是注意有無符號時候,需要相乘的起始位置也不一樣。返回a b的結果 string multiply const string a,const string b if b ...

各種面試題 分配糖果

有n個小朋友站成一排 編號從0到n 1 每個小朋友有乙個rating值,存放在ratings陣列中。老師需要給他們分配糖果,每個小朋友至少需要一顆糖果,對於任意相鄰的兩個小朋友i和i 1,rating值大的必須比rating值小的分配的糖果多 rating相同的沒必要分配一樣多的糖果 請計算最少需要...

各種面試題 堆放積木

有n塊積木,每塊積木有體積vol和重量weight兩個屬性,用二元組 vol,weight 表示。積木需要搭成豎直的塔狀,上面積木的體積和重量必須都比它下面的積木小。問最多可以搭多少個積木。樣例 有7個積木boxes 65,100 70,150 56,90 75,190 60,95 68,110 8...