#include <stdio.h> #include <stdlib.h> //无向图的邻接矩阵存储 by sixer 2009,9.1 /* 1.使用多个getchar()的时候应该考虑回车键的处理 2.多个scanf输入字符的时候也要注意回车键 ,第二个scanf会读取第一个的回车符 */ #define MaxVertextNum 10 typedef char VertexType; typedef int EdgeType; typedef struct { VertexType vertexs[MaxVertextNum]; EdgeType edges[MaxVertextNum][MaxVertextNum]; int v,e; }MGraph; void createGraph(MGraph *G) { printf("PLZ input the num of Vertes and Edges like this(5,2):"); scanf("%d,%d",&(G->v),&(G->e));//用户输入顶点和边数 int i; //开始初始顶点列表 for(i=0;i<(G->v);i++) { getchar(); printf("PLZ input the mark of the Verte:"); scanf("%c",&(G->vertexs[i])); } //开始初始化边列表 int j,k; for(j=0;j<(G->v);j++) for(k=0;k<(G->v);k++) { G->edges[j][k]=0; } for(i=0;i<(G->e);i++) { getchar(); char v1,v2; printf("PLZ input the two vertexs of the edge:"); scanf("%c,%c",&v1,&v2); //printf("Ur input edge is:%c,%c",v1,v2); for(j=0;v1!=G->vertexs[j];j++); for(k=0;v2!=G->vertexs[k];k++); G->edges[j][k]=1;//如果为网则赋予用户填入的权值 G->edges[k][j]=1;//如果为有向图则去掉该句 } getchar();//eat the absolutely last "Enter" //开始初始化边列表 } void printGraph(MGraph *G) { int i,j; printf("All Vertexs :"); for(i=0;i<G->v;i++) printf(" %c",G->vertexs[i]); printf("/nArray:/n"); for(i=0;i<G->v;i++) for(j=0;j<G->v;j++) { printf(" %d ",G->edges[i][j]); if(j==G->v-1) { printf("/n"); } } } main() { MGraph *myG; myG=malloc(sizeof(MGraph));//malloc return "void*" which means undefined pointer createGraph(myG); printGraph(myG); getchar(); }