2016-03-22 9 views
2

私はグラフで動作するようになっているC++プログラムをプログラミングしています。そして、私はその方法の一つに落ち着きの問題があります。だから、私の構造はグラフの弱い部分を印刷するベクトルの

struct graph { 
    std::vector <std::vector<int>> gr; 
}; 

のように見えると私は頂点を起点に弱い部品内部の頂点を返すために持っているメソッドを持っており、それが唯一の既存の頂点に呼び出すことができます。

だからここにある:

std::vector<int> weak_component(const graph& g, int vertex) { 
    std::vector<int> ret; 
    if (vertex >= 0 && vertex < g.gr.size()) { 
     for (std::vector<std::vector<int>>::size_type i = 0; 
      i < g.gr[vertex].size(); i++) { 
      for (std::vector<int>::size_type j = 0; j < g.gr[i].size(); j++) { 
       std::fill(ret.begin(), ret.begin(), g.gr[i][j]); 
       std::cout << vertex; 
      } 
     } 
    } 
    return ret; 
} 

私は別のベクトルを記入し、それを返すようにしようとしています。 ですから、例えば:私はデータ

0, 1 
1, 2 
1, 3 

、戻り値は0, 1, 2, 3ことshoul weak_component(g, 0) callメソッドをテストグラフを埋めるかどう。 私の方法で何が間違っていますか? ありがとうございます。

for (std::vector<std::vector<int>>::size_type i = 0; 
     i < g.gr[vertex].size(); i++) { 
     for (std::vector<int>::size_type j = 0; j < g.gr[i].size(); j++) { 
      std::fill(ret.begin(), ret.begin(), g.gr[i][j]); 
      std::cout << vertex; 
     } 
    } 

へ:

for (int adj : g.gr[vertex]) { 
     for (int elem : g.gr[adj]) { 
      ret.push_back(elem); 
      std::cout << vertex; 
     } 
    } 

あなたがする必要がある場合を除き、インデックスを使用していないこの

+0

'std :: fill(ret.begin()、ret.begin()'、おそらくここで何か間違っているかもしれませんよね? – Holt

+0

@Holtなぜそう思うのですか? – Lemmy

+1

['std :: fill'](http://www.cplusplus.com/reference/algorithm/fill/)には、 'first = last'があるので、何もしないのと同じように、空のシーケンスを埋めることになります。 – Holt

答えて

0

変更。範囲を繰り返します。

fillは何もしません。戻り値にstuffを追加するには、push_backに置き換えてください。

私はまた、汚れをきれいにするためにsortunique-eraseを追加したいと思うでしょう。

関連する問題