掌握图的基本操作,理解图的度的概念

实现图的邻接矩阵存储结构及相关操作函数。

对图的基本操作进行测试,包括创建图、插入删除顶点和边等。

实现求顶点度和搜索顶点功能的函数。

代码实现:

void InserdEdge(MatGraph& g, char* v1, char* v2, int w) { //该函数的作用是在无向图中插入一条边,其中v1和v2为边的两个顶点,w为边的权值。

       int i = SearchVexs(g, v1);//查询顶点v1是否在图g中存在

       int j = SearchVexs(g, v2);//查询顶点v2是否在图g中存在

       if (i == -1 || j == -1) {

              printf("顶点不存在");

              return;                                         //调用SearchVexs函数查找v1和v2在图中的位置,如果返回值为-1则说明该顶点不存在,插入边失败

       }

       g.edges[i][j] = w;

       g.edges[j][i] = w;  //由于是无向图,因此需要将邻接矩阵对称地赋值。

}

void DeletedEdge(MatGraph& g, char* v1, char* v2) { //若顶点v1,v2存在并且存在一条无向边,则删除这对顶点之间的无向边

       int i = SearchVexs(g, v1);//查询顶点v1是否在图g中存在

       int j = SearchVexs(g, v2);//查询顶点v2是否在图g中存在

       if (i == -1 || j == -1) {

              printf("顶点不存在");//调用SearchVexs函数查找v1和v2在图中的位置,如果返回值为-1则说明该顶点不存在,删除边失败

              return;

       }

       g.edges[i][j] = INF;

       g.edges[j][i] = INF;// 将邻接矩阵中对应位置的值赋为INF,表示v1和v2之间的边被删除

}                      //由于是无向图,因此需要将邻接矩阵对称地赋值。

void InserdVexs(MatGraph& g, char* v) {  //在无向图g中插入一个新顶点v

       int i;

       if (g.n > MAXVEX)

       {

              printf("顶点数量已达上限"); return;

       }

       strcpy(g.vexs[g.n].data, v);//把新顶点v存入数组g.vexs顶点集合

       g.vexs[g.n].adjvex = g.n + 1;//顶点编号+1

       for (i = 0; i <= g.n; i++) {//初始化为无从大

              g.edges[i][g.n] = INF;

              g.edges[g.n][i] = INF;//将顶点v的数据存入图的顶点数组中,然后将该顶点与其他顶点之间的边的权值初始化为INF

       }

       g.n++;//最后,顶点数加1

}

void main()     //主函数

{

       MatGraph g;

       int A[][MAXVEX] = {

                     {INF,  2, 5,  3, INF,INF,INF},

                     {2, INF, 2, INF,INF, 8, INF},

                     {5,2,INF, 1,  3,   5, INF},

                     {3,INF,1,INF, 5, INF,INF},

                     {INF,INF,3,5, INF, 3,  9},

                     {INF,8,5,INF,3,INF, 5},

                     {INF,INF,INF,INF,9,5,INF} };

       int n = 7, e = 12;

       char* a, * b, * c, * d, * h;

       a = (char*)malloc(10 * sizeof(char));

       b = (char*)malloc(10 * sizeof(char));

       c = (char*)malloc(10 * sizeof(char));

       d = (char*)malloc(10 * sizeof(char));

       h = (char*)malloc(10 * sizeof(char));

       CreateGraph(g, A, n, e);       //建立图的邻接矩阵

       printf("图G的存储结构:\n");

       DispGraph(g);

       printf("图G中所有顶点的度:\n");

       printf("  顶点\t度\n");

       for (int i = 0; i < g.n; i++)

              printf("   %s\t%d\n", g.vexs[i].data, Degree(g, i + 1));

       printf("\n");

       printf("在无向图g中插入一个新顶点v\n");

       printf("请输入要插入的顶点:");

       scanf("%s", a, 10);

       InserdVexs(g, a);//在无向图g中插入一个新顶点v

       DispGraph(g);

       printf("\n");

       printf("若顶点v1,v2存在,则在这对顶点之间插入一条权值为w的无向边\n");

       printf("请输入两个顶点:");

       scanf("%s", b, 10);

       scanf("%s", c, 10);

       InserdEdge(g, b, c, 9); //若顶点v1,v2存在,则在这对顶点之间插入一条权值为w的无向边

       DispGraph(g);

       printf("\n");

       printf("若顶点v1,v2存在并且存在一条无向边,则删除这对顶点之间的无向边\n");

       printf("请输入两个顶点:");

       scanf("%s", d, 10);

       scanf("%s", h, 10);

       DeletedEdge(g, d, h);//若顶点v1,v2存在并且存在一条无向边,则删除这对顶点之间的无向边

       DispGraph(g);

       printf("\n");

       printf("销毁图\n");

       DestroyGraph(g);

}

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jzybkse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值