2017-12-28 35 views
0

그래프 용 코드를 C++로 작성하고 있지만 문제가 있습니다. 제대로 작동하지 않습니다. 문제가 무엇인지 도와주세요. 사용자 및 그래프의 각 에지에 대한 그래프에 대한 입력을 취할 수있는 그래프의 코드는 특정 가중치를가집니다. 다음은 코드입니다 :내 C++ 코드가 그래프에서 작동하지 않습니다.

#include <iostream> 
#include <vector> 

using namespace std; 

struct edge { 
    char src; 
    char dest; 
    int weight; 
}; 

class Graph { 
public: 
    vector<edge> edges; 
    int size,j=0; 

    //Constructor 
    Graph(int c) { 
    size=c; 
    } 

    void graphDesign(char s,char d,int w) { 
     edges[j].src=s; 
     edges[j].dest=d; 
     edges[j].weight=w; 
     j++; 
    } 

    void printGraph() { 
     for(int i=0; i<size; i++) { 
      cout<<edges[i].src<<"->"<<edges[i].dest<<" : 
       <<edges[i].weight<<endl; 
     } 
    } 
}; 


int main() { 

    int e,i,w; 
    char s,d; 
    cout<<"Enter number of edges of graphs: "; 
    cin>>e; 
    Graph graph(e); 
    for(i=0; i<e; i++) { 
     cout<<"Enter source: "; 
     cin>>s; 
     cout<<"Enter destination: "; 
     cin>>d; 
     cout<<"Enter weight of the edge: "; 
     cin>>w; 

     graph.graphDesign(s,d,w); 
    } 

    graph.printGraph(); 

    return 0; 
} 
+1

조언 - 'size'와 같은 관계없는 변수를 사용하여 컨테이너의 항목 수를 나타내지 않습니다. 컨테이너가 제공하는 것을 사용하십시오 (예 :'vector :: size()'). 불필요한 변수를 사용하면 크기가 변경 될 때 해당 변수를 업데이트하지 않기 때문에 버그가 발생할 위험이 있습니다. 당신의 코드는 이것의 증거입니다 - edges.size()는 무엇입니까? 나는 그것이 당신이 믿는 것이 아니라고 확신합니다. – PaulMcKenzie

+0

"제대로 작동하지 않는다"는 말을 자세히 설명해 주시겠습니까? 어떻게 작동하지 않습니까? – 1201ProgramAlarm

+0

처음 값을 입력 할 때 몇 시간 동안 값을 물어 보는 동안 get이 끝나면 모든 값이 출력됩니다. –

답변

1

한 가지 문제는 여기에 있습니다 : edges 이후

void graphDesign(char s,char d,int w) { 
     edges[j].src=s; 
     edges[j].dest=d; 
     edges[j].weight=w; 
     j++; 
    } 

edges[j]가 불법적 인 접근 인 접근, 빈 벡터이다.

사용하기 전에 edges 벡터의 크기를 적절하게 조정해야합니다.

class Graph { 
public: 
    vector<edge> edges; 

    //Constructor 
    Graph(int c) : edges(c) {} 

이렇게하면 c 항목이있는 벡터가 만들어집니다.

또한 이 아닌은 외부의 불필요한 멤버 변수 (예 : size)를 사용합니다. vector 클래스에는 컨테이너에있는 항목 수를 알려주는 size() 멤버 함수가 있습니다.

size과 같은 외부 변수를 사용하면 벡터 크기가 변경 될 때마다이 변수를 업데이트해야하므로 버그가 발생할 위험이 있습니다. 이 하우스 키핑을 직접 시도하는 대신 으로 제공되는 size() 함수를 사용하십시오.

+0

감사! 그것의 일하는 ... –