2011-10-21 72 views
0

我有ADT爲圖像:創建鄰接單鏈表

typedef struct element { 
    int info; 
    struct element *link; 
} Tnode; 

typedef struct graphAdjList { 
    int nodes; 
    Tnode *adjList[MAX]; // array of 20 pointers to Tnode 
} Tgraph; 

Tgraph *readGraph(FILE *fd); 
void printGraph(Tgraph *g); 
void dfs(Tgraph *g, int start, int visited[], int pred[]); 
void destroyGraph(Tgraph *g); 

幷包圍文件 「maze.txt」 與以下內容:

0 1 6 8 
1 0 2 3 
2 10 11 
3 1 4 12 
4 3 13 
5 4 6 9 
6 5 7 
7 8 9 
8 0 7 14 
9 15 5 7 
10 2 
11 2 
12 3 
13 4 
14 8 
15 9 

其中0 1 6 8表示節點號0有(單向)連接到節點1,6和8.現在我不知道如何通過readGraph()方法基於上面的列表構造圖。請你指出我詳細的實施原因,我是新手在C?非常感謝

+0

ADT從哪裏來?它似乎沒有能力從一個節點的多個鏈接。 – Chriszuma

+0

來自我的老師><我也懷疑,但他確定它是正確的 – MinhHoang

回答

0

看起來你的老師打算讓你把圖讀到adjacency list

這是C99中的sample implementation

將其保存到一個名爲maze.c,然後用(例如)編譯的文件:

gcc -g -O2 -Wall -Werror -std=c99 -o maze maze.c

我沒有實現dfs()功能,因爲它是不完全清楚,我什麼它應該去做。我假設有一些文字與您的作業一起解釋每個功能的要求。您可能必須重寫printGraph()函數以符合分配要求。

+0

嗨,所以對於每個節點,您將爲它分配新內存,即使它已經存在於上一行中,對嗎?例如,在第一行,我們有頂點數爲6的鏈接到頂點8,在第7行,我們有頂點數量爲6,但現在鏈接到5.這將導致頂點6直接指向5,並在第一行跳過8! – MinhHoang

+0

dfs(Tgraph * g,int start,int visited [],int pred [])執行深度優先類型搜索過程,從開始節點開始,標記非零值,以訪問visited []數組的所有節點,並標記到pred []數組的哪個邊緣通向這個頂點(pred [5] = 3意味着頂點3對頂點5具有邊緣) – MinhHoang

+0

是的,爲每個邊緣分配一個新節點。 Google上的圖片搜索可能有助於理解數據類型的構建方式。 –