无向图的实现


      这是无向图的源代码,相信你看了也已经学会无(有)向网,有向图了。如有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;

}



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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值