图-邻接矩阵的建立

图的邻接矩阵

将图的各点信息存入一个一维数组,将边(两点组成)及其权存入一个二维数组。

结构体:

#include<stdio.h>
#include<stdlib.h>
#define Max 100 //假设包含100个顶点
typedef struct{ //包含权的邻接矩阵的的定义
    int point[Max];  //顶点信息的数组
    int side[Max][Max]; //边的权信息的数组
    int nowp; //创建图的顶点数
    int nows; //创建图的边数
}map;

创建矩阵:

void CreateGraph(map *G) //图的生成函数
{ 
    int n,e,vi,vj,w,i,j;
    printf("请输入图的顶点数和边数:");
    scanf("%d%d",&G->nowp,&G->nows);
    
    for(i=0;i<G->nowp;i++) //图的初始化
        for(j=0;j<G->nowp;j++)
            { 
            if(i==j)
                G->side[i][j]=0;//对角线均初始化为0 
            else 
                G->side[i][j]=-1;//其余全初始化为-1,-1为两点未连接 
            }
        for(i=0;i<G->nowp;i++) //将顶点存入数组中
        { 
            printf("请输入第%d个顶点的信息(整型):",i+1);
            scanf("%d",&G->point[i]);
        }
    printf("\n");

    for(i=0;i<G->nows;i++)
    { 
        printf("请输入边的信息点a,点b,权值:");
        scanf("%d%d%d",&vi,&vj,&w); 
        G->side[vi-1][vj-1]=w;//因为为无向图,所以数关于对角线对称 
        G->side[vj-1][vi-1]=w;
        
    }
}

打印出所见矩形:

void print(map G) //输出邻接矩阵的信息
{ 
    int i,j;
    printf("\n输出顶点的信息(整型):\n");
    for(i=0;i<G.nowp;i++)
        printf("%8d",G.point[i]);

    printf("\n输出邻接矩阵:\n");
    printf("\t");
    for(i=0;i<G.nowp;i++)
        printf("%8d",G.point[i]);
printf("\n");
    for(i=0;i<G.nowp;i++)
    { 
        printf("\n%8d",i+1);
        for(j=0;j<G.nowp;j++)
        { 
            printf("%8d",G.side[i][j]);
        }
        printf("\n");   
    }
}

主函数:

int main()
{ 
    map G;
    CreateGraph(&G);
    print(G);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值