1. 程式人生 > >資料結構例程——圖的鄰接矩陣儲存結構及演算法

資料結構例程——圖的鄰接矩陣儲存結構及演算法

這裡寫圖片描述

#include <stdio.h>
#include <malloc.h>
#define MAXV 100 /*最大頂點數設為100*/
#define LIMITLESS 9999
typedef struct
{
    int no;         //頂點編號
    char info[20];  //頂點其他資訊,型別視應用而定
} VertexType;       //頂點型別

typedef struct          //圖的定義
{
    int edges[MAXV][MAXV];   //鄰接矩陣
    int n, e;               //頂點數,弧數
VertexType vexs[MAXV];//存放頂點資訊 } MGraph; //建立一個圖的鄰接矩陣儲存 void CreateMGraph(MGraph *G) { /*建立有向圖G 的鄰接矩陣儲存*/ int i,j,k,w; printf("請輸入頂點數和邊數(輸入格式為:頂點數 邊數):"); scanf("%d %d",&(G->n),&(G->e)); /*輸入頂點數和邊數*/ printf("請輸入頂點資訊(輸入格式為:頂點號 頂點描述):\n"); for (i=0; i<G->n; i++) scanf
("%d %s",&(G->vexs[i].no),G->vexs[i].info); /*輸入頂點資訊,建立頂點表*/ for (i=0; i<G->n; i++) /*初始化鄰接矩陣*/ for (j=0; j<G->n; j++) { if(i==j) G->edges[i][j]=0; else G->edges[i][j]=LIMITLESS; } printf("請輸入每條邊對應的兩個頂點的序號及權值(輸入格式為:i j w):\n"
); for (k=0; k<G->e; k++) { scanf("%d %d %d",&i,&j,&w); /*輸入e 條邊,建立鄰接矩陣*/ G->edges[i][j]=w; /*若為無權圖,直接G->edges[j][i]=1;,無需輸入w*/ } }/*CreateMGraph*/ //顯示一個用鄰接矩陣儲存的圖 void DispMGraph(MGraph *G) { int i,j; printf("頂點數: %d,邊數: %d\n", G->n, G->e); printf("%d 個頂點的資訊::\n", G->n); for (i=0; i<G->n; i++) /*輸出頂點資訊*/ printf("%5d %5d %s\n", i, G->vexs[i].no, G->vexs[i].info); printf("各頂點相連的情況:\n"); printf("\t"); for (j=0; j<G->n; j++) printf("[%d]\t", j); printf("\n"); for (i=0; i<G->n; i++) { printf("[%d]\t", i); for (j=0; j<G->n; j++) { if(G->edges[i][j]==LIMITLESS) printf("∞\t"); else printf("%d\t", G->edges[i][j]); } printf("\n"); } }/*DispMGraph*/ int main() { MGraph *g; g = (MGraph *)malloc(sizeof(MGraph)); CreateMGraph(g); DispMGraph(g); return 0; }