-4

ベクトル内に格納されているグラフのエッジの組み合わせを作成しようとしています。生成し、生成されたベクトルもベクトルに格納する必要があります。以下は私がこれまでに行ったことですが、現時点ではコンパイルされていません。

#include <stdlib.h>
#include<iostream>
#include<vector>
#include<algorithm>

struct edge{

int a;
int b;
int weight;
edge(int u,int v,int cost)
{
    a=u;
    b=v;
    weight=cost;
}

};


int main()
 {
  typedef std::vector<edge> V; //<or_any_class>
  V v;

    v.push_back(1,2,10);
    v.push_back(1,3,10);
    v.push_back(1,4,10);
    v.push_back(3,4,10);
    v.push_back(3,5,10);
    v.push_back(3,5,10);

  do{
        std::cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<" "<<v[3]<<" "<<v[4]<<std::endl;
    }

   while(std::next_permutation(v.begin(),v.end()));
return 0;
 }

What Im trying to get as output;

 1 2
 1 3
 1 4
 3 4
 3 5
 4 3
 1 2 1 3
 1 2 1 4

ヒントはありますか?

4

2 に答える 2

7

エラー1:

 v.push_back(1,2,10);

する必要があります

 v.push_back(edge(1,2,10));
             ^^^^

エラー2:

コンパイルできるようにクラスを定義operator <<する必要がありますedgestd::cout<<v[0]

std::ostream& operator << (std::ostream& o, const edge& e)
{
     return o << e.a << " " << e.b << " " << e.weight;
}

エラー3:

コンパイルして機能できるようoperator <に、egdeクラスを定義する必要がありますstd::next_permutation(v.begin(),v.end())

bool operator < (const edge& e1, const edge& e2)
{
    if(e1.a != e2.a) return e1.a < e2.a;
    if(e1.b != e2.b) return e1.b < e2.b;
    return e1.weight < e2.weight; 
}
于 2012-06-27T13:08:11.073 に答える
3

これ:

v.push_back(1,2,10); 

する必要があります:

v.push_back(edge(1,2,10)); 
于 2012-06-27T13:08:46.610 に答える