程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 數據結構之---C語言實現圖的數組(鄰接矩陣)存儲表示

數據結構之---C語言實現圖的數組(鄰接矩陣)存儲表示

編輯:關於C語言

數據結構之---C語言實現圖的數組(鄰接矩陣)存儲表示


//圖的數組(鄰接矩陣)存儲表示
#include 
#include 
#define MAX_VEX_NUM 50
typedef char VertexType;
typedef enum {
    DG, UDG
} GraphType;
typedef struct {
    VertexType vexs[MAX_VEX_NUM];
    int arcs[MAX_VEX_NUM][MAX_VEX_NUM];
    int vexnum, arcnum;
    GraphType type;
} MGraph;
 
//定位
int getIndexOfVexs(char vex, MGraph *MG)
{
    int i;
    for (i = 1; i <= MG->vexnum; i++) 
	{
        if (MG->vexs[i] == vex) 
		{
            return i;
        }
    }
    return 0;
}
 
//創建圖
void create_MG(MGraph *MG) 
{
    int i, j, k;
    int v1, v2, type;
    char c1, c2;
    printf(Please input graph type DG(0) or UDG(1) :);
    scanf(%d, &type);
    if (type == 0)
        MG->type = DG;
    else if (type == 1)
        MG->type = UDG;
    else 
	{
        printf(Please input correct graph type DG(0) or UDG(1)!);
        return;
    }
 
    printf(Please input vexmun : );
    scanf(%d, &MG->vexnum);
    printf(Please input arcnum : );
    scanf(%d, &MG->arcnum);
    getchar();
    for (i = 1; i <= MG->vexnum; i++) 
	{
        printf(Please input %dth vex(char):, i);
        scanf(%c, &MG->vexs[i]);
        getchar();
    }
 
    //初始化鄰接矩陣
    for (i = 1; i <= MG->vexnum; i++) 
	{
        for (j = 1; j <= MG->vexnum; j++)
	   	{
            MG->arcs[i][j] = 0;
        }
    }
 
    //輸入邊的信息,建立鄰接矩陣
    for (k = 1; k <= MG->arcnum; k++) {
        printf(Please input %dth arc v1(char) v2(char) : , k);
        scanf(%c %c, &c1, &c2);
        v1 = getIndexOfVexs(c1, MG);
        v2 = getIndexOfVexs(c2, MG);
        if (MG->type == 1)
            MG->arcs[v1][v2] = MG->arcs[v2][v1] = 1;
        else
            MG->arcs[v1][v2] = 1;
        getchar();
    }
}
/**
 * 打印鄰接矩陣和頂點信息
 */
void print_MG(MGraph MG) 
{
    int i, j;
    if(MG.type == DG)
	{
        printf(Graph type : Direct graph:
);
    }
    else
	{
        printf(Graph type: Undirect graph:
);
    }
	printf(Graph vertex number: %d 
,MG.vexnum);
    printf(Graph arc number: %d 
,MG.arcnum);
 
    printf(Vertex set:);
    for (i = 1; i <= MG.vexnum; i++)
        printf(%c   , MG.vexs[i]);
	printf(
);
    printf(Adjacency Matrix:
);
 
    for (i = 1; i <= MG.vexnum; i++) 
	{
        j = 1;
        for (; j < MG.vexnum; j++) 
		{
            printf(%d   , MG.arcs[i][j]);
        }
		printf(%d   , MG.arcs[i][j]);
		printf(
);
    }
}
 

int main() 
{
    MGraph MG;
    create_MG(&MG);
    print_MG(MG);
    return 0;
}

 

如圖:

\

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved