主函数
#include "./praph.h"
int main(int argc, const char *argv[])
{
Graph *G = create();
if (NULL == G)
{
return -1;
}
add_rel(G,'A','B');
add_rel(G,'A','C');
add_rel(G,'A','D');
add_rel(G,'C','B');
show(G);
return 0;
}
头文件
#ifndef __PRAPH_H__
#define __PRAPH_H__
#define N 4
#include <stdio.h>
#include <stdlib.h>
typedef char datatype;
typedef struct
{
datatype data[N]; //存放顶点元素
int rel[N][N]; //存放关系的数组
}Graph;
//创建
Graph *create();
//获取顶点下标函数
int get_pos(Graph *G,datatype v);
//添加关系
int add_rel(Graph *G,datatype v1,datatype v2);
//show函数
void show(Graph *G);
#endif
被调函数
#include "./praph.h"
//创建
Graph *create()
{
Graph *G = (Graph*)malloc(sizeof(Graph));
if (NULL == G)
{
printf("申请失败");
return NULL;
}
//初始化
for (int i=0;i<N;i++)
{
G->data[i] = 'A'+i;
}
for (int i=0;i<N;i++)
{
for (int j=0;j<N;j++)
{
G->rel[i][j] = 0;
}
}
printf("创建成功\n");
return G;
}
//获取顶点下标函数
int get__pos(Graph *G,datatype v)
{
for (int i=0;i<N;i++)
{
if (G->data[i] == v)
{
return i;
}
}
return -1;
}
//添加关系
int add_rel(Graph *G,datatype v1,datatype v2)
{
if (G == NULL)
{
printf("图错误\n");
return -1;
}
int pos1 = get__pos(G,v1);
int pos2 = get__pos(G,v2);
if (pos1 == -1 || pos2 == -1)
{
printf("所给节点不合法\n");
return -1;
}
G->rel[pos1][pos2] = G->rel[pos2][pos1] = 1;
printf("%c和%c关系建立成功\n",v1,v2);
return 0;
}
//show函数
void show(Graph *G)
{
printf("当前图如下\n");
for (int i=0;i<N;i++)
{
printf("\t%c",G->data[i]);
}
printf("\n");
//输出
for (int i=0;i<N;i++)
{
printf("%c\t",G->data[i]);
for (int j=0;j<N;j++)
{
printf("%d\t",G->rel[i][j]);
}
printf("\n");
}
}
测试
创建成功
A和B关系建立成功
A和C关系建立成功
A和D关系建立成功
C和B关系建立成功
当前图如下
A B C D
A 0 1 1 1
B 1 0 1 0
C 1 1 0 0
D 1 0 0 0