图的基本操作,为了便于信息即可显示,在函数内部输出了数据,可后修改来实现更接近封装程序。
GraphTestApp.c内容:
#include
#include "M_AL_Graph.h"
int main()
{
int i,j,n,m,x,y,w;
Mgraph A;//定义邻接矩阵,
Graph* G=CreateGraph();//定义图并创建图
//输入图信息,文件方式,可注释掉来手动输入
freopen("Input.txt","r",stdin);
scanf("%d%d",&n,&m);//输入节点数和边数
for(i=0; i
{
scanf("%d%d%d",&x,&y,&w);
AddGraphEdge(G,x,y,w);//无向图正反两遍加入边
AddGraphEdge(G,y,x,w);
}
AdjGraphMatrix(G,A);//得到邻接矩阵,以0填充无关边
//测试1、输出邻接矩阵
printf("1、\n邻接矩阵如下:\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%2d ",A[i][j]);
printf("\n");
}
//测试2、输出邻接表
printf("2、\n邻接表如下:\n");
DisplayGraph(G);
//测试3、输出深度和宽度遍历
printf("3、\n深度遍历如下:\n");
GraphDeepthTraversal(G);
printf("\n宽度遍历如下:\n");
GraphBreadthTraversal(G);
//测试4、输出prim算法生成的最小生成树,个边和总权值
printf("\n4、\n最小生成树的各边分别为:");
printf("\n最小生成树总权值为:%d\n",GraphPrim(G));
return 0;
}
/*
--------------------------------------
测试图数据1 | 测试图数据2
6 10 | 6 10
1 6 21 | 1 2 6
1 5 19 | 1 3 1
1 2 10 | 1 4 5
2 6 11 | 2 3 5
5 6 33 | 3 4 5
4 6 14 | 2 5 3
4 5 18 | 3 5 6
3 4 6 | 3 6 4
2 4 6 | 5 6 6
2 3 5 | 4 6 2
--------------------------------------
*/
/*测试图数据1的结果:
--------------------------------------
1、
邻接矩阵如下:
0 10 0 0 19 21
10 0 5 6 0 11
0 5 0