數據結構(圖)_鄰接矩陣

前言

數據結構是非常重要的一門學課 , 研究的問題是事物如何存儲在計算機中 ! 以前學習過 , 但是那個時候因爲基礎太差的問題和沒有耐心的問題和沒有把它當成重要的東西所以基本沒有學到什麼 ,但當我意識到它的重要性時 , 認真花了時間來對它進行學習.

  • 學習到圖這個結構了 , 剛學習完鄰接矩陣存儲它 , 所以用代碼來實現了一下它.實現完感覺還是要進行記錄一下.

知識點總結

  • 爲什麼要使用鄰接矩陣來存儲圖呢?
  • 使用鄰接矩陣存儲圖結構的好處是什麼?
  • 鄰接矩陣存儲圖結構如何進行存儲?
    • 有向圖
    • 無向圖
  • 什麼是對稱矩陣?

成功截圖

動態創建鄰接矩陣

代碼

分析過程

  • 獲取頂點數和邊數
  • 獲取所有的頂點數 (存儲到一維數組中
  • 初始化所有頂點與頂點之間的關係 (給二維數組所有元素初始化一個值)
  • 開始獲取並存儲邊關係
    • 獲用戶輸入邊的關係 (主要是兩個頂點)
    • 如果有權值的話那麼將權值放到兩個頂點構成的二維數組中的位置 ,如果沒有權值的話寫成1表示兩個頂點可以構成邊即可.
#include <stdio.h>
#define MAXV 100            // 最大頂點數
#define INFINITY 65535      // 用65535來代表無窮大 (初始化時用到
#pragma warning(disable:4996)

typedef struct Graph
{
    char vexs[MAXV];                        // 頂點表
    int tables[MAXV][MAXV];                 // 鄰接矩陣
    int numV, numE;                         // 圖中當前的頂點數和邊數
} GRAPH , *PGRAPH ;

int main()
{
    Graph graph;
    PGRAPH pGraph = &graph;

    //獲取頂點數與邊數
    printf("請輸入頂點數與邊數:");
    scanf("%d %d", &pGraph->numV, &pGraph->numE);

    //獲取所有頂點數
    printf("請輸入所有的頂點數:");
    for (int i = 0; i < pGraph->numV; i++)
    {
        scanf("%d", &pGraph->vexs[i]);
    }

    //初始化所有的頂點與頂點之間的關係 
    for (int j = 0; j < pGraph->numV; j++)
    {
        for (int k = 0; k < pGraph->numV; k++) 
        {
            pGraph->tables[j][k] = INFINITY;
        }
    }

    //獲取頂點與頂點之前的關係(邊) - 帶權值
    for (int k = 0; k < pGraph->numE; k++)
    {
        int t, g;
        printf("請輸入邊的兩個頂點:");
        scanf("%d %d", &t, &g);             //獲取邊


        printf("請輸入權值:");
        scanf("%d", &pGraph->tables[t][g]);

        pGraph->tables[t][g]= pGraph->tables[g][t];     //因爲鄰接矩陣是對稱表 . 所以設置一下.

    }



    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章