图的创建

/************头文件****************

#ifndef __GRAPH_H__
#define __GRAPH_H__

#define MAXN 5  //最大顶点数

typedef char vtype; //设顶点为字符类型
typedef int adjtype; //设邻接矩阵A中元素adj为整型

typedef struct graph{
    vtype V[MAXN];        //顶点存储空间
    adjtype A[MAXN][MAXN];  //邻接矩阵
}graph;

extern graph* create_graph(void);
extern int get_pos(char a[], char ch);
#endif

************************************/


//函数实现

#include <malloc.h>
#include "graph.h"

graph* create_graph(void)
{
    graph *G = (graph*)malloc(sizeof(graph));  
    vtype ch, v, u;
    adjtype w;
    int i, j, n;
    i = n = 0;

    puts("inputs the top points:");  //输入顶点名字
    while ((ch = getchar()) != '#')
    {
        if ((ch != ' ') && (ch != '\n'))
        {
            n++;
            G->V[i++] = ch;
            if (n > MAXN)
                break;
        }
    }

    while (getchar() != '\n')  //清空缓冲区
        continue;

    for (i=0; i<MAXN; i++)      //初始化邻接矩阵为0
        for (j=0; j<MAXN; j++)
            G->A[i][j] = 0;

 
    while (1)  
    {
        puts("input the u, v, w:");
        while ((scanf("%c %c %d", &u, &v, &w)) != 3)  //输入错误处理
        {  
            if (u == '#')
                break;
            printf("input error!\n");
            while (getchar() != '\n')
                continue;
            puts("input the u, v, w:");
        }

        if (u == '#')
            break;
        i = get_pos(G->V, u);  //获得顶点的下标
        j = get_pos(G->V, v);

        if ((i == -1) || (j == -1)) //如果没有找到顶点,则继续输入
        {
            printf("can't find the top point!\n");
            while (getchar() != '\n')
                continue;
            continue;
        }

        G->A[i][j] = w;
        while (getchar() != '\n')
            continue;
    }

    return G;
}


int get_pos(char a[], char ch) //此函数的功能是:返回顶点的位置
{
    int pos=0;
    while (pos < MAXN)
    {
        if (a[pos] == ch)
            return pos;    
        pos++;
    }
    return -1;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值