#include <stdio.h>
#include <stdlib.h>
//#include <curses.h>
typedef char VertexType; //顶点类型用户自定义
typedef int EdgeType; //边上的权值类型用户自定义
#define MAXVEX 100 //最大顶点数
#define INFINITY 65535 //代表无穷大,用来表示不存在的边的权值为无穷大
#define DEBUG
typedef struct
{
VertexType vexs[MAXVEX]; //顶点
EdgeType arc[MAXVEX][MAXVEX]; //邻接矩阵
int numVertexes, numEdges; //顶点数,边数
}Graph;
//定位???
int locates(Graph *g, char ch)
{
int i = 0;
for(i=0; i<g->numVertexes; i++){
if(g->vexs[i]==ch){
break;
}
}
if(i>g->numVertexes){
return -1;
}
return i;
}
void CreatGraph(Graph *g)
{
int i, j, k, w;
printf("input num of vertexs, edges:\n");
scanf("%d, %d", &(g->numVertexes), &(g->numEdges));
#ifdef DEBUG
printf("%d %d\n", g->numVertexes, g->numEdges);
#endif
for(i = 0; i <g->numVertexes;i++)
{
g->vexs[i] = getchar();
//没看懂啊
while(g->vexs[i]=='\n'){
g->vexs[i] = getchar();
}
}
#ifdef DEBUG
for(i = 0; i < g->numVertexes; i++){
printf("%c ", g->vexs[i]);
}
printf("\n");
#endif
for(i = 0; i <g->numVertexes;i++){
for(j=0; j<g->numVertexes;j++){
g->arc[i][j]=INFINITY; //邻接矩阵初始化为无穷大
}
}
for(k = 0; k<g->numEdges; k++){
char p,q;
printf("input i , j of (vi, vj) and weight:\n");
p =getchar();
while(p=='\n'){
p=getchar();
}
q=getchar();
while(q=='\n'){
q=getchar();
}
scanf("%d",&w);
int m=-1;
int n=-1;
m=locates(g,p);
n=locates(g,q);
if(m==-1||n==-1)
{
fprintf(stderr, "there is no this vertex.\n");
return ;
}
g->arc[m][n]=w;
g->arc[n][m]=g->arc[m][n];
}
}
//打印无向图
void printGraph(Graph *g)
{
int i , j;
for(i = 0; i<g->numVertexes;i++){
for(j=0; j<g->numVertexes;j++){
printf("%d ",g->arc[i][j]);
}
printf("\n");
}
}
int main(int argc, char ** argv)
{
Graph g;
CreatGraph(&g);
printGraph(&g);
return 0;
}
运行结果如上图