您的位置:首页 > 理论基础 > 数据结构算法

数据结构,图的邻接矩阵表示

2009-09-01 14:45 309 查看
#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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: