2013-12-15 71 views
0

如何用for_each循環代替DFS()的循環。請讓我知道是否有其他有效的方法來創建圖形或任何網站教學圖通過STL我基本上可以用於競爭性編程?DFS和用for_each替換

void DFS(int s) 
{ 
    visited[s] = true; 
    cout<<s<<" \n"; 
    for(vector<pair<int,int> >::iterator it=AdjList[s].begin();it!=AdjList[s].end();it++) 
    { 
    if(!visited[it->first]) 
    { 
     //cout<<it->first<<endl; 
     DFS(it->first); 
     edgeTo[it->first]=s; 
    } 
    } 
} 

對整個代碼http://ideone.com/iXO9QO

+0

您可能想看看[Boost Graph庫](http://www.boost.org/doc/libs/1_55_0/libs/graph/doc/index.html)。它以非常高效和緊湊的C++提供了所有文本圖算法的實現。 –

+0

謝謝,但我認爲BGL不包括在簡單的gcc中...所以將代碼提交給JUDGE時將不可用,但可用於項目製作,我猜... :) – CoderBoy

回答

1

在DFS這個循環是非常簡單的,所以我懷疑你需要使用的for_each了點。 併爲您的信息,

vector<pair<int,int> >::iterator it=AdjList[s].begin(); 

可以只是

auto it=AdjList[s].begin(); 

使用自動關鍵字會降低你的代碼更音量。

那麼,我個人用STL實現了所有主要的圖形算法。看到你的代碼,我說你已經走上了競爭性編程的正確道路。 儘管boost提供了各種現成的庫,但STL足夠用於實現圖算法。

+0

Ya Thnx ... nw atleast我知道我不是徒勞的嘗試...... – CoderBoy