標籤:

浙江大學-數據結構-小白專場:C語言實現如何建立圖-6.5.4

完整地建立一個MGraph

那麼在實現完了前面兩個函數之後,我們就準備好完整地建立一個用鄰接矩陣表示的圖了,通常我們的輸入格式是這樣的,就是先給你所有的頂點個數,給你總的邊數,然後接下來有這麼多行,每行給出一條邊的信息,也就是邊的初始點,終點,以及它的權重,等等,針對這個輸入格式,我們來寫一個函數,叫做BuildGraph,那麼在這個函數裡面,我們就是要申明這麼一個圖,最後在這一個地方把它建好,然後返回

建立的過程我們剛才說了,其實就是兩步走,首先讀進來一個頂點數,這裡相信你會有疑問,這個頂點數和邊數不是一起給的嗎?我幹嘛不一起讀進來呢?我是有道理的,看到後面就明白了,

我不需要知道邊數,只要有這個頂點數以後,我就可以初始化一個圖了,初始化的這個圖呢,是有所有的頂點,但是一條邊都沒有的Graph,

然後我再讀這個邊數,就直接讀的是Graph-Ne, 也就是說我不用另外去申明一個臨時變數Ne,讀進來,然後再把它賦值給Graph->Ne, 我可以在建立了這個Graph之後,直接把它讀進來,那麼如果讀進來的邊數等於0的話,說明本身這個圖就沒有一條邊,那麼到這一步以後,我們就已經完成了,所以到這裡就直接return Graph,就結束了

如果有邊的話,我們就要把一條一條邊讀進來,然後插到圖裡面去,用Edge,所以在調用它之前呢,我們先要申明一個臨時邊的結點,去臨時的存一下這個邊,然後我們就進入了一個簡單的循環,在每一次循環裡面,我們把一條邊的信息讀進來,然後調用了我們前面實現的InsertEdge,把這條邊插到圖裡,然後就完成了任務,

當然在有些情況下,頂點還是有數據的,後面還會給出每一個頂點上面要存的數據,在這種情況下,我們還需要寫一個循環,把這個頂點的數據也讀進來,那麼剩下的事情就是看看我們這裡頭用到了多少臨時變數,在前面聲明一下,就完成了我們這麼一個MGraph的建立,那麼說到這裡你要想真的有必要這麼麻煩嗎?

如果是在考試的狀態下面,只有非常短的時間去建立一個圖的話,其實只要這麼一小段代碼就可以了,這一小段代碼在幹什麼事情呢?

就是我直接把這個鄰接矩陣,以及頂點數和邊數都申明成全局變數,在這我簡單的假設鄰接矩陣就是整型的,如果它是其它類型的話,就把它變成其它類型就是了,那麼BuildGraph就不需要再返回這個圖了,因為這個圖是一個全局變數,我直接把它寫成void類型,那麼在這裡面做的事情就是,首先相當於前面的CreateGraph,直接寫一個二重循環,然後把這個矩陣所有的元素先初始化為零,或者是無窮大

接下來就讀進來這個邊數Ne,然後對每一條邊,我把邊的兩個頂點和權重讀進來,我直接這樣賦值,就結束了

那你說本來這麼簡單實現的一個東西,我們前面費勁寫那些是為什麼呢?這個問題不是特別明顯,要好好想一下2333


推薦閱讀:

浙江大學-數據結構-圖:小白專場:C實現哈利波特的考試-7.2.1
浙江大學-數據結構-小白專場:最小路徑問題-7.1.4
浙江大學-數據結構-圖:小白專場:C實現哈利波特的考試-7.2.2
浙江大學-數據結構-小白專場:C語言實現如何建立圖-6.5.3

TAG:數據結構 |