2012-06-25 2 views
0

나는 (네트워크로 간주 될 수 있습니다) 특정 그래프 가장자리 주어진 유효한 나무를 생성하기 위해 노력하고있어. 다음은 파일에서 그래프 가장자리를 읽는 코드입니다.생성 나무

FILE *fin = fopen("somefile.txt", "r"); 

    for (int i = 0; i <=edges; i++) { 
    fscanf(fin, "%d%d%d", &u, &v, &w); 
      graph[u][v]=w; 
    } 
    fclose(fin); 

는 지금은 주어진 루트 u 이러한 가장자리 주어진 주어진 크기 N 가능한 나무 (또는 토폴로지)의 최대 수를 생성합니다. 예를 들어

, 에지가있는 경우; 1 ---> 2; 1 ---> 3; 3 ---> 4. 이제 N이 1이면; u = 1에서 가능한 나무는 1 ----> 2 및 1 ---> 3입니다. N이 2이면 가능한 나무는 1 ---> 2 & 3 또는 1 ---> 3 ----> 4 이것을 달성하는 가장 좋은 방법은 무엇입니까? 나는 복잡한 문제에 관심이 없다. 도와 주셔서 감사합니다!

+0

welll로 작업을해야하지 않을 수 있습니다, 내가 루프를 사용하여 시도했지만 내가 가진 트리를 생성하는 루프에 대한을 많이 갖는 상황 실행 해요 N 자녀. 및? 우리가 필요로 루프에 대한 어떤 종류의 –

+0

:(혼란의 원인이 많이는 우리가 길을 따라 당신을 도울 수 있습니다 전에이 문제를 해결에 대해 생각하고 어떻게 볼 수 있습니다. – Ashe

+0

을 아주 정직하게, 내가 지금까지 무슨 짓을했는지 많은 의미가 제작되지 않는 것은? 당신은 정점에 뿌리를두고, 모든 감독 트리를 생성하는 U를 원한다. –

답변

0

는 최고의 구현하지만이 같은 뭔가

map<vertex,list<edge>> vertexToedgeThatIncludeIt 
void Coloredge(edgeList) 
{ 
    for each edge in list: 
    edge.color=True 
} 


void init() 
{ 
    for each edge: 
    { 
    vertexToedgeThatIncludeIt[edge.vertex1].append(edge) 
    vertexToedgeThatIncludeIt[edge.vertex2].append(edge) 
    } 
} 

edge* findUnColoredvertex(edgeList,startPoistion,founfAt) 
{ 
    skip to startPoistion 
    for each edge In edgeList: 
      if edge not colored return edge 
    update founfAt 
    return NULL 
} 

void spanTree(vertexToedgeThatIncludeIt,spanTreeList,lastvertex) 
{ 
    if(spanTreeList.size==NumberOfTotalvertex) 
    { 
     print spanningTree 
     return 
    } 
    nextedge=findUnColoredvertex(vertexToedgeThatIncludeIt[lastvertex],0,founfAt) 
    while(nextedge!=NULL) 
    {   
     spanTreeList.append(nextedge); 
     Coloredge(vertexToedgeThatIncludeIt[lastvertex]); 
     spanTree(vertexToedgeThatIncludeIt,spanTreeList,nextedge.othervertex) 
     spanTreeList.pop(); 
     UnColoredge(vertexToedgeThatIncludeIt[lastvertex]) 
     nextedge=findUnColoredvertex(vertexToedgeThatIncludeIt[lastvertex],founfAt,founfAt) 
    } 

} 
+0

초등부 질문에 대해 유감스럽게 생각하지만 가장자리를 추가하려면 어떻게해야합니까? (즉, 1 → 2, 3 → 4). 어떤 사용하여 자동 기능 초기화 –

+0

모습, 내가 그것을 해결에 노력 정점 – jojo

+0

메신저 미안하지만, 메신저가 아닌 영어 스피커에서 – jojo