这是无向图的源代码,相信你看了也已经学会无(有)向网,有向图了。如有bug,还请大神指正。
#include<stdio.h>
#include<stdlib.h>#define maxvex 20
typedef struct
{
int a[maxvex][maxvex];
int vex[maxvex];
int vexnum;//顶点数
int arcnum;//边的数目
}AdjMatrix;
//用邻接矩阵创建无向图
void creat(AdjMatrix * G)
{
int i,j,relation;
int vex1,vex2;
printf("请输入顶点数和边数\n");
scanf("%d%d",&G->vexnum,&G->arcnum);
//建邻接矩阵用来存放顶点之间的关系,顶点数默认从一开始,
//a[1][2]则表示1号顶点和2 号顶点之间有没有联系,有则为1,没有为0
for(i=1;i<=G->vexnum;i++)
for(j=1;j<=G->vexnum;j++)
G->a[i][j]=0;
for(i=0;i<G->arcnum;i++)
{
printf("请输入该边对应的两个顶点:\n");
printf("这是第%d条边",i+1);
//有向图注意第一个顶点即由该顶点指出的边,(如该边由a指向b,则第一个顶点为a)
printf("请输入第一个顶点:\n");
scanf("%d",&vex1);
printf("请输入第二个顶点:\n");
scanf("%d",&vex2);
G->a[vex1][vex2]=1;
G->a[vex2][vex1]=1;//如果是有向图,删掉这句
}
}
//输出邻接矩阵
void print(AdjMatrix *G)
{
int i,j;
for(i=1;i<=G->vexnum;i++)
{for(j=1;j<=G->vexnum;j++)
printf("%5d",G->a[i][j]);
printf("\n");
}
}
int main (void)
{
AdjMatrix *G;
G=(AdjMatrix *)malloc(sizeof(AdjMatrix ));
creat(G);
print(G);
return 0;
}
总结:现在总结一下,其实自己编码的首要问题就是还没有分析清楚就上手编码,实现过程总是不那么顺利,反而花费了好多时间。还有就是程序毕竟也是越来越难,每次不可能都会,所以就算勉强实现也只能算是完成任务,下次编码还是不会,菜鸟还是菜鸟。学习是一个反复的过程,既然我们不能一次就把它理解的那么透彻清楚,那么就不要要求自己一次就把它学会。今天敲完了代码,哪天闲的没事也可以随便来组数据测试一下,仔细想一下哪些地方写的不太好,还可以优化。