2016-04-24 91 views
0

基本上我生成了一個adj_matrix,我想從adj_matrix做一個adj_list ...但是我總是收到一個錯誤,說「不匹配的呼叫...」 我試了它沒有aPair我仍然得到同樣的錯誤,我似乎無法弄清楚我的問題是什麼。誰能告訴我爲什麼列表不起作用?該列表是在代碼的最後鄰接列表錯誤與列表

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

umm我沒有爲adj_list做一個函數,所以我不認爲它可以被調用。基本上我生成了一個adj_matrix,現在從形式矩陣我必須創建adj_list – Darkflame

+0

嗯,但我只需要從adj_matrix [i] [j]的權重有沒有辦法解決這個問題? – Darkflame

回答

2

我看到,adj_list不可調用,所以你的代碼在那裏是壞的。有幾個簡單的解決方案。看一下these docs,你可以簡單地訪問listObj.front()listObj.back(),或者你也可以使用listObj.begin()創建一個迭代器並遍歷這兩個元素(如果你決定在列表中放置兩個以上的元素,這可能是可取的)。有關爲列表創建迭代器的簡單示例,請參閱this tutorial,該代碼片段位於摘要正上方的代碼片段中。

請注意,在這裏,您爲簡單/抽象調用listObj的列表對象在該底部循環中僅爲adj_matrix[i][j]。這應該修復你的語法錯誤。另外,除了你的代碼的語法,我不明白你爲什麼要把權重推到列​​表中,然後你打印出來並返回鄰接矩陣。我也不明白爲什麼你會使用對象列表時,似乎你只是想推動整數權重。爲此,您可以使用簡單的整數向量(即:vector <int> adj_list;)...或者甚至更簡單,您可以使用簡單的整數數組...而不是使用成對列表向量。

編輯:在本地運行代碼並查看值,我意識到這個問題在OP的輸出中的一個錯誤只是他在C++中使用「true」來代替整數,它正在創建一個錯誤,如this SO post所述。該OP還有一個進一步的設計決定,以確定鄰接列表的位置。更多關於什麼是鄰接表,在概念上,找到on Wikipedia

+0

o假設是(j,體重),我只是測試了,如果它接受1整數而不是2,但沒有工作 – Darkflame

+0

哦,你有沒有想過它?它看起來應該相當簡單。但讓我知道它是如何發展的。 – user3773048

+0

不,我真的無法弄清楚它保持givnig我同樣的錯誤,當我使用矢量< int >這次崩潰了這個時間 – Darkflame