2011-05-01 189 views
1

你好,無處不在,有圖解熱的解釋來創建圖形。矩陣。然而,我需要簡單的僞代碼或算法....我知道如何繪製它的形式。矩陣和不知道爲什麼沒有人在哪裏解釋如何真正把它放在代碼中。我不是說實際的代碼,但至少算法...很多人說.. 1是如果有一個邊緣,我知道..我已經創建了形容詞。矩陣和不知道如何將其轉移到圖形。我的頂點沒有名稱,它們只是矩陣的索引。例如1-9是如何從鄰接矩陣中創建無向圖?

1 2 3 4 5 6 7 8 9 
1 0 1 0 0 1 0 0 0 0 
2 1 0 1 0 0 0 0 0 0 
3 0 1 0 1 0 0 0 0 0 
4 0 0 1 0 0 1 0 0 0 
5 1 0 0 0 0 0 1 0 0 
6 0 0 0 1 0 0 0 0 1 
7 0 0 0 0 1 0 0 1 0 
8 0 0 0 0 0 0 1 0 0 
9 0 0 0 0 0 1 0 0 0 

這是淵源迷宮「我矩陣的名字」 ......必須標記ROW1 COL4開始和ROW7 col8結束......

從來沒有人告訴我如何實現圖形出矩陣的(無筆):PP

感謝

+1

鄰接矩陣_is_表示圖的一種方式。你的意思是你想轉換爲另一種表示?如果是這樣,你想如何表示圖表? – Zilchonum 2011-05-01 03:00:31

回答

1

自然對稱性

Adjance的ncy矩陣是圖的表示。對於無向圖,其矩陣是對稱的。例如,如果存在從vertex ivertex j的邊緣,則還必須有從vertex jvertex i的邊緣。實際上這是相同的邊緣。

* 
    * 
    *  A' 
    A * 
     * 
      * 

算法

注意到這種性質,你可以實現你的算法簡單:

void drawGraph(vertices[nRows][nCols]) 
{ 
    for (unsigned int i = 0; i < nRows; ++i) 
    { 
     for (unsigned int j = i; j < nCols; ++j) 
     { 
      drawLine(i, j); 
     } 
    } 
} 
+0

嗯我想我沒有問問題右..我有那部分...那只是打印形式矩陣....我想將形式轉換爲矩陣...我現在設置我想要從我發佈的矩陣創建一個圖。我有一個想法,但不知道...像這樣:node n1 = adjMatrix [0] [0] – user478984 2011-05-01 03:34:18

+0

我想知道如何創建矩陣的頂點以及如何將矩陣的邊緣傳遞給它們? – user478984 2011-05-01 03:35:47

+0

@ user478984:adjMatrix [i] [j]不是頂點本身,它表示連接頂點i和j的邊有多少個。我和j是頂點。你是否要求將圖形繪製在其他東西的矩陣之外? – 2011-05-01 03:44:13

1

您可以從鄰接矩陣表示轉換的圖形,以基於節點的表示像這樣:

#include <iostream> 
#include <vector> 
using namespace std; 

const int adjmatrix[9][9] = { 
    {0,1,0,0,1,0,0,0,0}, 
    {1,0,1,0,0,0,0,0,0}, 
    {0,1,0,1,0,0,0,0,0}, 
    {0,0,1,0,0,1,0,0,0}, 
    {1,0,0,0,0,0,1,0,0}, 
    {0,0,0,1,0,0,0,0,1}, 
    {0,0,0,0,1,0,0,1,0}, 
    {0,0,0,0,0,0,1,0,0}, 
    {0,0,0,0,0,1,0,0,0} 
}; 

struct Node { 
    vector<Node*> neighbours; 
    /* optional additional node information */ 
}; 

int main (int argc, char const *argv[]) 
{ 
    /* initialize nodes */ 
    vector<Node> nodes(9); 

    /* add pointers to neighbouring nodes */ 
    int i,j; 
    for (i=0;i<9;++i) { 
    for (j=0;j<9;++j) { 
     if (adjmatrix[i][j]==0) continue; 
     nodes[i].neighbours.push_back(&nodes[j]); 
    } 
    } 

    /* print number of neighbours */ 
    for (i=0;i<9;++i) { 
    cout << "Node " << i 
     << " has " << nodes[i].neighbours.size() <<" outbound edges." << endl; 
    } 

    return 0; 
} 

在這裏,圖形被表示爲具有指向可達鄰居節點的指針的節點數組。在設置節點及其鄰居指針之後,使用此數據結構來執行所需的圖算法,在這個(不重要的)示例中,輸出每個節點具有的出站有向邊的數量。