2016-04-24 10 views
0

基本的に私はadj_matrixを生成しましたが、adj_matrixからadj_listを作成したいと思います...しかし、私は "呼び出しには一致しません..."というエラーが表示され続けます 私はまだaPair私は私の問題が何であるか把握していないようです。誰でもリストが機能しない理由を教えてもらえますか?リストには、私はadj_listで呼び出すことはできませんので、あなたのコードが壊れていることがわかり、コードリストの隣接リストエラー

int **gen_random_graph(int n) 
{ 
    srand(time(0)); 
    int **adj_matrix = new int*[n]; 
    for(int i = 0; i < n; i++) 
    { 
     for (int j = i; j < n; j++) //generating a N x N matrix based on the # of vertex input 
     { 
      adj_matrix[i] = new int[n]; 
     } 
    } 

    for(int u = 0; u < n; u++) 
    { 
     for (int v = u; v < n; v++) 
     { 
      bool edgeOrNot = rand() % 2; //decide whether it has an edge or not 
      adj_matrix[u][v] = adj_matrix[v][u] = edgeOrNot; 
      if(adj_matrix[u][v] == true) 
      { 
       adj_matrix[v][u] = true; 
       if(u == v)       //We can't have i = j in an undirected graph so we set it to false 
       { 
        adj_matrix[u][v] = -1; 
       } 
      } 
      else          //if adj_matrix[u][v] is false set the symmetry to be false 
      { 
       adj_matrix[v][u] = adj_matrix[u][v] = -1; 
      } 
     } 

    } 
    for(int i = 0; i < n; i++) 
    { 
     for(int j = i; j < n; j++)   //create the N x N with edges and sets the weight between the edge randomly 
     { 
      if(adj_matrix[i][j] == true) 
      { 
        int weight = rand() % 10 + 1; 
        adj_matrix[i][j] = adj_matrix[j][i] = weight; 
        cout << " (" << i << "," << j << ") " << "weight: " << adj_matrix[i][j] << endl; 
      } 
     } 
    } 



for(int i = 0; i < n; i++) 
{ 
    vector<int> adj_list; 
    for(int j = i; j < n; j++) 
    { 
     if(adj_matrix[i][j] > 0) 
     { 
      int weight = adj_matrix[i][j]; 
      adj_list.push_back(j); 
      cout << adj_list[i] << " " << endl; 
     } 
    } 
} 
    print(n,adj_matrix); 
    return (adj_matrix); 
} 
+0

adj_listを呼び出すことはできますか? –

+0

私はadj_listのための関数を作っていないので、呼び出すことはできません。基本的に私はadj_matrixを生成し、adjマトリックスからadj_listを作成する必要があります – Darkflame

+0

hmmmmしかし、私はちょうどadj_matrix [i] [j]の重みを必要としますこれを修正する方法はありますか? – Darkflame

答えて

2

の一番最後にあります。それにはいくつかの簡単な解決策があります。 these docsを見れば、単純にlistObj.front()listObj.back()にアクセスするか、listObj.begin()を使ってイテレータを作成し、2つの要素を反復することもできます(リストに2つ以上の要素を置くことを決めるのが望ましい場合があります)。サマリーのすぐ上のコードスニペットで、リストのイテレータを作成する簡単な例については、this tutorialを参照してください。

簡略化/抽象化のために私がlistObjと呼んだリストオブジェクトは、単にその底ループにadj_matrix[i][j]となることに注意してください。それは構文エラーを修正するはずです。

また、コードの構文以外に、なぜ重みをリストにプッシュしようとしているのかわからないので、隣接行列を印刷して戻しています。私はまた、なぜあなたはそれに整数ウェイトを押したいと思うときにペアオブジェクトのリストを使用するのか分からない。そのためには単純な整数のベクトル(例:vector <int> adj_list;)を使うことができます。さらに単純な場合は、ペアのリストのベクトルを使用するのではなく、単純な整数の配列を使用できます。

EDIT:コードをローカルで実行して値を調べたところ、OPの出力のバグは単純に、整数の代わりにC++で "true"を使用していたという問題でした。バグは、this SO postで説明されています。また、OPは、隣接関係リストが関係する場所を決定するさらなる設計決定を有する。隣接関係リストの詳細は、概念的にはon Wikipediaです。

+0

私はちょうどそれが2の代わりに1の整数を受け入れるが、うまくいきませんでしたか(j、weight)であると仮定します。 – Darkflame

+0

ああ、あなたはそれを理解しましたか?それはかなり簡単なように見える。しかし、それがどうなるか教えてください。 – user3773048

+0

いいえ、私は正直なところ、私は同じエラーを私はベクトルを使用するときにgivnigを把握することはできません< int >それはこの時間thoをクラッシュする – Darkflame

関連する問題