邻接矩阵

简介: 数据结构中无向图邻接矩阵的存储

6a7eda05d5b5636b3e76d4aa8988-1.png

输入
8,10
1
2
3
4
5
6
7
8
1,2
1,5
2,6
3,6
3,4
3,7
4,7
4,8
6,7
7,8
输出
请输入顶点数和边数:请输入顶点本身的数据:
请输入边的数据:
0 1 0 0 1 0 0 0
1 0 0 0 0 1 0 0
0 0 0 1 0 1 1 0
0 0 1 0 0 0 1 1
1 0 0 0 0 0 0 0
0 1 1 0 0 0 1 0
0 0 1 1 0 1 0 1
0 0 0 1 0 0 1 0
#define vertex_NUM 20                   
#define VERType int                         
#define InfoType char               //存储弧或者边额外信息的变量类型
#define VertexType int   

typedef struct {
    VERType adj;                            
    InfoType * info;                        
}AdjMatrix[vertex_NUM][vertex_NUM];

typedef struct {
    VertexType vexs[vertex_NUM];        
    AdjMatrix arcs;                         //二维数组,记录顶点之间的关系
    int vexnum,arcnum;                      
}MGraph;

//判断出顶点在二维数组中的位置
int LocateVex(MGraph * G,VertexType v){
    //遍历一维数组,找到变量v
    int i=0;
    for (; i<G->vexnum; i++) {
        if (G->vexs[i]==v) {
            break;
        }
    }
    //如果找不到,返回-1
    if (i>G->vexnum) {
        printf("no such vertex.\n");
        return -1;
    }
    return i;
}

void CreateDN(MGraph *G){
    scanf("%d,%d",&(G->vexnum),&(G->arcnum));
    for (int i=0; i<G->vexnum; i++) {
        scanf("%d",&(G->vexs[i]));
    }
    for (int i=0; i<G->vexnum; i++) {
        for (int j=0; j<G->vexnum; j++) {
            G->arcs[i][j].adj=0;
            G->arcs[i][j].info=NULL;

        }
    }
    for (int i=0; i<G->arcnum; i++) {
        int v1,v2;
        scanf("%d,%d",&v1,&v2);
        int n=LocateVex(G, v1);
        int m=LocateVex(G, v2);
        if (m==-1 ||n==-1) {
            return;
        }
        G->arcs[n][m].adj=1;
        G->arcs[m][n].adj=1;
    }
}
void PrintGrapth(MGraph G)
{
for(int i=0;i<G.vexnum;i++)
{
    for(int j=0;j<G.vexnum;j++)
    {
        printf("%d ",G.arcs[i][j].adj);
    }
    printf("\n");
}
}
int main() {
    MGraph G;//建立一个图的变量
    CreateDN(&G);//调用创建函数,传入地址参数
    printf("请输入顶点数和边数:请输入顶点本身的数据:\n");
    printf("请输入边的数据:\n");
    PrintGrapth(G);//输出图的二阶矩阵
    return 0;
}
相关文章
|
7月前
|
存储
邻接表详解
邻接表详解
42 0
|
7月前
|
存储 算法
有向图和无向图的表示方式(邻接矩阵,邻接表)
有向图和无向图的表示方式(邻接矩阵,邻接表)
318 0
|
存储 机器学习/深度学习 人工智能
图的存储及基本操作总结(邻接矩阵、邻接表)及C/C++代码实现
图的存储及基本操作总结(邻接矩阵、邻接表)及C/C++代码实现
1437 1
|
存储
图操作之邻接矩阵与邻接表的深度优先遍历
图操作之邻接矩阵与邻接表的深度优先遍历
199 0
拓扑排序(邻接表实现)
拓扑排序(邻接表实现)
196 0
拓扑排序(邻接表实现)
|
机器学习/深度学习
有向图,无向图的邻接矩阵和邻接表模板
有向图,无向图的邻接矩阵和邻接表模板
196 0
有向图,无向图的邻接矩阵和邻接表模板
|
存储 JavaScript 算法
邻接表详解(C/C++)
目录 一、概念 二、分类 1)无向图的邻接表 2)有向图的邻接表(出弧) 3)有向图的逆邻接表(入弧) 三.步骤 四、代码
692 0
邻接表详解(C/C++)