Agri-Net
来源:互联网 发布:手绘板绘图软件 编辑:程序博客网 时间:2024/05/16 07:54
题意:已知N个点,以及这N个点两两间的距离,求最小生成树
解题思路:
- Prim算法
代码:
/*ID: zc.rene1LANG: CPROG: agrinet */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 200000int N;int weight[100][100];int FindMinNode(int *in_tree, int *distance){ int i, min_i, min_distance = MAX; for (i=0; i<N; i++) {if (!in_tree[i]){ if (distance[i] < min_distance) {min_distance = distance[i];min_i = i; }} } return min_i;}int Prim(void){ int i, j, tree_size, tree_cost; int *distance = (int *)malloc(N*sizeof(int)); int *in_tree = (int *)malloc(N*sizeof(int)); for (i=0; i<N; i++) {distance[i] = MAX;in_tree[i] = 0; } tree_size = 1; tree_cost = 0; in_tree[0] = 1; for (i=0; i<N; i++) {distance[i] = weight[0][i]; } while (tree_size < N) {i = FindMinNode(in_tree, distance);tree_size++;tree_cost += distance[i];in_tree[i] = 1;for (j=0; j<N; j++){ if (i != j) {if (distance[j] > weight[i][j]){ distance[j] = weight[i][j];} }} } return tree_cost;}int main(void){ FILE *fin, *fout; int i, j; fin = fopen("agrinet.in", "r"); fout = fopen("agrinet.out", "w"); fscanf(fin, "%d", &N); for (i=0; i<N; i++) {for (j=0; j<N; j++){ fscanf(fin, "%d", &weight[i][j]);} } i = Prim(); fprintf(fout, "%d\n", i); return 0;}
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Agri-Net
- Error while registering Oracle JDBC Diagnosability MBean.
- analysis of ShadowMapping Sample with GLSL
- Hibernate--hibernate.hbm2ddl.auto配置详解
- android adb shell 命令大全
- flash and vc++制作精美界面程序
- Agri-Net
- extjs中Toolbar工具栏的用法
- mysql的python api
- 测试
- 获取浏览器窗口的高度和宽度
- IOS深入学习(19)之View object
- 开发QQ互联android版Ane扩展 遇到几个典型问题
- access函数
- 浅谈深度学习(Deep Learning)的基本思想和方法