一一计划(Day13)矩阵法存储有向带权图

矩阵法存储图

用二维数组来标记点和对应的权值

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef char VertexType[4];
typedef int VRType;
#define MAX 10
typedef struct graph
{
    int arcnum;//边数
    int vexnum;//权数
    VertexType vextex[MAX];//二维数组vertex[MAX][4]
    VRType matrix[MAX][MAX];//所有所在边的权值
}GRAPH,*LPGRAPH;
//搜索定位
int serchPos(LPGRAPH G,VertexType x)
{
    int i;
    for(i=0;i<G->vexnum;i++)
    {
        if(strcmp(G->vextex[i],x)==0)
            return i;
    }
    return -1;
}
LPGRAPH createGraph()
{
    LPGRAPH G=(LPGRAPH)malloc(sizeof(GRAPH));
    printf("请输入边数和顶点数:");
    scanf("%d%d",&G->arcnum,&G->vexnum);
    printf("请输入%d 个顶点\n",G->vexnum);
    int i;
    for(i=0;i<G->vexnum;i++)
    {
        //每一行都是一个字符串
        scanf("%s",G->vextex[i]);//
    }
    memset(G->matrix,0,sizeof(int)*100);
    //两点确定一条边
    printf("请输入%d 条边的信息\n",G->arcnum);
    VertexType v1,v2;
    VRType vrt;
    for(i=0;i<G->arcnum;i++)
    {
        scanf("%s%s%d",v1,v2,&vrt);
        //在权值数组中去定位
        int posV1 =serchPos(G,v1);
        int posV2 =serchPos(G,v2);
        G->matrix[posV1][posV2]=vrt;
    }
    return G;
}
void printfGraph(LPGRAPH G)
{
    int i,j;
    for(i=0;i<G->vexnum;i++)
    {
        printf("\t%s",G->vextex[i]);
    }
    printf("\n");
    for(i=0;i<G->vexnum;i++)
    {
        printf("%s\t",G->vextex[i]);
        for(j=0;j<G->vexnum;j++ )
        {
            printf("%d\t",G->matrix[i][j]);
        }
        printf("\n");
    }
}
int main()
{
    LPGRAPH G= createGraph();
    printfGraph(G);
    system("pause");
    return 0;
}

这个相比二叉搜索树还是比较容易理解的,今天偷懒了一会儿,打了一晚上的斗地主,哎 ,今晚没有多余时间做过多的解释,今天就这样吧
10000小时计划
44h

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值