使用鄰接矩陣儲存無向圖
阿新 • • 發佈:2019-05-11
問題描述
使用鄰接矩陣儲存下圖所示無向圖
解題思路
建立一個鄰接矩陣
程式實現
#include <stdlib.h> #include <stdio.h> #define MAXVEX 10 /* Status是函式的型別,其值是函式結果狀態程式碼,如OK等 */ typedef int Status; /* 頂點型別應由使用者定義 */ typedef char VertexType; /* 邊上的權值型別應由使用者定義 */ typedef int EdgeType; typedef struct { VertexType vex[MAXVEX]; EdgeType arc[MAXVEX][MAXVEX]; int numNodes, numEdges; } MyGraph, *GraphPlus; void CreateMyGraph(GraphPlus *plus); int main(void) { int i, j; GraphPlus plus; CreateMyGraph(&plus); for (i = 0; i < plus->numNodes; i++) { for (j = 0; j < plus->numNodes; j++) { printf("%d\t", plus->arc[i][j]); } printf("\n"); } } void CreateMyGraph(GraphPlus *plus) { int i, j, k, w; printf("請輸入頂點數和邊數:\n"); scanf("%d,%d", &i, &j); *plus = (GraphPlus)malloc(sizeof(MyGraph)); getchar(); getchar(); (*plus)->numNodes = i; (*plus)->numEdges = j; // 讀入頂點數 for (i = 0; i < (*plus)->numNodes; i++) { scanf("%c", &(*plus)->vex[i]); } // 初始化邊陣列 for (i = 0; i < (*plus)->numNodes; i++) { for (j = 0; j < (*plus)->numNodes; j++) { (*plus)->arc[i][j]=0; } } // 讀入numEdges條邊,建立鄰接矩陣 for(k = 0; k < (*plus)->numEdges; k++) { printf("輸入邊(vi,vj)上的下標i,下標j:\n"); scanf("%d,%d", &i, &j); (*plus)->arc[i][j] = 1; // 因為是無向圖,矩陣對稱 (*plus)->arc[j][i] = (*plus)->arc[i][j]; } }
執行結果