2013-12-15 2 views
0

DFS() 루프를 for_each 루프로 대체하는 방법은 무엇입니까? 그래프 나 다른 사이트를 만들 수있는 다른 방법이 있다면 알려 주시기 바랍니다. 경쟁적으로 프로그래밍 할 때 기본적으로 사용할 수있는 STL을 통해 Graph를 가르칩니다. ? 전체 코드 http://ideone.com/iXO9QODFS 및 for_each로 대체

+0

[Boost Graph library] (http://www.boost.org/doc/libs/1_55_0/libs/graph/doc/index.html)에서 살펴볼 수 있습니다. 모든 텍스트 북 그래프 알고리즘을 구현할 수 있으며 매우 효율적이고 컴팩트 한 C++로 제공됩니다. –

+0

고마워,하지만 BGL은 간단한 gcc에 포함되어 있지 않다고 생각한다. 그렇기 때문에 심사 위원에게 코드를 제출하는 동안 사용할 수 없지만 프로젝트에서 사용할 수있다 ....... – CoderBoy

답변

1

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; 
    } 
    } 
} 

. 그리고 당신의 정보,

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

은 당신의 코드에서 많은 부피를 줄일 자동 키워드를 사용

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

수 있습니다.

개인적으로 나는 모든 주요 그래프 알고리즘을 STL로 구현했습니다. 코드를 보면, 이미 경쟁 프로그래밍에 대한 올바른 길을 가고 있다고 말합니다. boost는 모든 종류의 readymade 라이브러리를 제공하지만 STL은 그래프 알고리즘을 구현하기에 충분합니다.

+0

Ya Thnx ... nw atleast 나는 알고있다. 나는 헛되이 노력하지 않고있다 ... – CoderBoy