建立图并求图的最小代价生成树

1.建立图的存储结构(邻接矩阵或邻接表),能够输入图的顶点、边、以及边上的权值的信息,存储到相应的存储结构中,并输出图的结构。
2.求图的最小代价生成树

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7446006
  • 你也可以参考下这篇文章:【课程设计】图的建立和遍历(基于邻接表和邻接矩阵存储)
  • 除此之外, 这篇博客: 两种最小生成树的方法——普里姆算法、克鲁斯卡尔算法中的 (1)建立无向图的邻接矩阵 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • int CreateGraph(MGraph& G) {
    	//创建无向网的邻接矩阵 
    	int v1,v2,w;  //邻接两点v1,v2,以及所构成边的权值w 
    	printf("请输入顶点数和边数:");
    	scanf("%d%d", &G.vexnum, &G.arcnum);
    	for (int i = 0; i < G.vexnum; ++i){ 
    		//构造顶点向量 
    		printf("请输入第%d个顶点的值:",i+1);
    		scanf("%d", &G.vexs[i]);
    	}
    	for (int i = 0; i < G.vexnum; ++i){
    		//初始化邻接矩阵, 将各边的权值都赋值为 INT_MAX
    		for (int j = 0; j < G.vexnum; ++j)
    			G.arcs[i][j]=  INFINITY ;
    	}
    	for (int k = 0; k < G.arcnum; ++k) {
    		//构造邻接矩阵 
    		printf("请输入相邻两点的值,以及他们所构成边的权值:");
    		scanf("%d%d%d", &v1, &v2, &w);
    		int i = LocateVex(G, v1);
    		int j = LocateVex(G, v2);
    		G.arcs[i][j]= w;
    		G.arcs[j][i] = G.arcs[i][j];  //无向网邻接矩阵对称 
    	}
    	return 0;
    }
  • 您还可以看一下 吴刚老师的【吴刚】电商广告设计标准视频教程课程中的 立体按钮制作方法与主体文案关系布局小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    邻接矩阵:

    邻接矩阵可以用一个二维数组来表示一个图。对于一个具有n个节点的无向图,我们可以定义一个n×n的矩阵,矩阵中的每一个元素表示一个节点与另一个节点之间边的存在情况。

    如果存在一条边,则该元素为1;如果不存在,则该元素为0。如果该图存在边的方向,则该矩阵为一个n×m的矩阵,其中n和m分别表示图中的节点数和边数。

    例如,下面的矩阵表示了一个由5个节点组成的无向图:

    0 1 2 3 4 0   0 1 0 1 0 1   1 0 1 0 1 2   0 1 0 1 0 3   1 0 1 0 0 4   0 1 0 0 0

    矩阵中的第i行和第j列交点处的元素表示从节点i到节点j是否存在一条边。该矩阵是对称的,即如果存在从节点i到节点j的边,则也存在从节点j到节点i的边。

    构造邻接矩阵的代码:

    // 构造邻接矩阵 int matrix[MAX_NODES][MAX_NODES]; memset(matrix, 0, sizeof(matrix));

    // 将节点之间的边加入邻接矩阵 for (int i = 0; i < num_edges; i++) { int start = edges[i].start; int end = edges[i].end; int weight = edges[i].weight; matrix[start][end] = weight; matrix[end][start] = weight; // 对称的 }

    邻接表:

    邻接表是一种常见的图的表示方法,它将每个节点及其出边放入一个链表中,并通过其头指针来索引每个链表。对于有n个节点的无向图,它的邻接表可以定义为一个有n个指针的数组,数组中的每个元素都指向一个链表,包含从该节点出发的所有边。

    例如,下面是一个由5个节点组成的无

《算法精解(C语言描述)》