无向图的实现

     这是 无向图实现的源代码,当然,相信你看完一定也学会了有向图,有(无)向网的实现。有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;
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;

}

总结:

       现在总结一下,其实自己编码的首要问题就是还没有分析清楚就上手编码,实现过程总是不那么顺利,反而花费了好多时间。还有就是程序毕竟也是越来越难,不可能每次都会,所以就算勉强实现也只能算是完成任务,下次编码还是不会,菜鸟还是菜鸟。学习是一个反复的过程,既然我们不能一次就把它理解的那么透彻清楚,那么就不要要求自己一次就把它学会。今天敲完了代码,哪天闲的没事也可以随便来组数据测试一下,仔细想一下哪些地方写的不太好,还可以优化,当你不断的总结,你会不断的收获,后来,你会发现这不是浪费时间,因为你开始越来越快的完成编码,并且代码越写越好。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值