无向图的邻接矩阵

1、图是一种复杂的数据结构,表现在不仅各顶点的度可以不同,而且顶点之间的关系也错综复杂。从图的定义可知一个图的信息包括两个部分:图中顶点的信息和描述顶点之间关系——边或弧的信息。因此无论采取什么方法来建立图的存储结构,都要完整、准确地反映这两部分的信息。
2、用邻接矩阵存储图,很容易确定图中任意两个顶点之间是否相连。但是,要确定图中具体有多少条边,则必须按行、按列对每个元素进行查找后方能确定,因此花费的时间代价较大,这也是用邻接矩阵存储图的局限性。

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20

typedef struct{
    int vertex[MAXSIZE];            //节点信息
    int edge[MAXSIZE][MAXSIZE];     //边信息   
}Graph;

void createGraph(Graph * p,int n,int e){
    Graph * g = p;

    for(int i=0;i<n;i++){           //输入节点值
        g->vertex[i] = i;

    for(int j=0;j<n;j++){           //初始化邻接矩阵
        for(int k=0;k<n;k++){
            g->edge[j][k] = 0;
        }   
    }   

    for(int t=0;t<e;t++){           //连通节点      
        printf("请输入边(i,j)\n");
        scanf("%d,%d",&i,&j);
        g->edge[i][j] = 1;
        g->edge[j][i] = 1;
    }
}

int main(){
    Graph * p = (Graph *)malloc(sizeof(Graph));
    int n,e;

    printf("请输入节点的个数。\n");
    scanf("%d",&n);
    printf("请输入边数。\n");
    scanf("%d",&e);
    createGraph(p,n,e);
    printf("无向图的邻接矩阵表示为:\n");

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            printf("%4d",p->edge[i][j]);
        }
        printf("\n");
    }
    return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caoyahong114/article/details/51536682
个人分类: 数据结构
上一篇C++的一些简单示例(4)
下一篇图的深度优先搜索(采用邻接表存储方式)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭