图的应用题
作为另一种非线性结构—图,它比树更复杂,它的数据元素之间存在多对多的关系,即图中任意一个节点都有多个前驱结点和多个后继结点。图中任意两个结点之间都有可能存在关系,从而可以表达数据元素之间更复杂的关系。
1.使用邻接矩阵或邻接表表示下面的无向图,并计算图中的总边数。
//创建无向图
#include <stdio.h>
#include <stdlib.h>
typedef char DataType;
typedef int weight; /*权值*/
#define MAXVEX 50 /*最大顶点个数*/
typedef struct {
weight arcs[MAXVEX][MAXVEX];/*邻接矩阵*/
DataType data[MAXVEX];/*顶点信息*/
int vexs; /*顶点数*/
}MGraph, *AdjMetrix;
//(1)创建邻接矩阵
void CreateGraph(AdjMetrix g, int m[][MAXVEX], DataType d[], int n) {
int i, j;
g->vexs = n;
for (i = 0; i < n; i++) {
g->data[i] = d[i];
for (j = 0; j < n; j++) g->arcs[i][j] = m[i][j];
}
}
//显示邻接矩阵
void DispGraph(AdjMetrix g) {
int i, j;
printf("顶点:\n\t");
for (i = 0; i < g->vexs; i++)
printf("V%c\t", g->data[i]);
printf("\n\n邻接矩阵:");
for (i = 0; i < g->vexs; i++) {
printf("\nV%c:\t", g->data[i]);
for (j = 0; j < g->vexs; j++)
printf("%d\t", g->arcs[i][j]);
}
printf("\n\n");
}
int main(int argc, char * argv[]) {
MGraph gg;
AdjMetrix g = ≫
int pos, i,p,bian;
char d[] = {
'1','2','3','4','5','6'};
int m[][MAXVEX] = {
{
0,31,0,0,21,11},{
31,0,7,18,0,8},{
0,7,0,12,0,0},{
0,18,12,0,29,23},{
21,0,0,29,0,9},{
11,8,0,23,9,0}};
CreateGraph