/************头文件****************
#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;
}