摘要:
最小生成树。prim算法。要问while(scanf("%d", &n)) 和 while(~scanf("%d", &n))、while(scanf("%d", &n)==1)、while(~scanf("%d", &n)!=EOF) 的区别有多大??答 :前者TLE ,后者 15MS。。。。 不信可以试试。。以后再也不敢简写了。。。代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<cst 阅读全文
摘要:
最小生成树。Prim 算法。代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 5 using namespace std; 6 7 int map[102][102]; 8 9 int prim(int n)10 {11 int i, j, min, sum=0;12 int pos, vis[102], d[102];13 memset(vis, 0, sizeof(vis));14 for (i=1; i<=n; i++)15 d[i]=map[1][i]... 阅读全文
摘要:
最小生成树.Kruskal 算法代码: 1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 5 using namespace std; 6 7 typedef struct 8 { 9 int a, b;10 int d;11 int flag;12 }node;13 14 int set[102];15 node w[5002];16 17 int cmp(const void *a, const void *b)18 {19 node *pa=(node *)a;20 no... 阅读全文
摘要:
给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.求最小生成树的算法(1)克鲁斯卡尔算法图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间.(2)普里姆算法图的存贮结构采用邻接矩阵.此方法是按各个顶点连通的步骤进行,需要用一个顶点集合,开始为空集,以后将以连通的顶点陆续加入到集合中,全部顶点加入集合后就得到所需的最小生成树 .下面来具体讲下:克鲁斯卡尔算法方法:将图中边按其权值由小到大的次序顺序选取,若选边后不形成回路,则保留作为一条边,若形成回路则除去.依次选够(n-1)条边,即得最小生 阅读全文
摘要:
给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.求最小生成树的算法(1)克鲁斯卡尔算法图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间.(2)普里姆算法图的存贮结构采用邻接矩阵.此方法是按各个顶点连通的步骤进行,需要用一个顶点集合,开始为空集,以后将以连通的顶点陆续加入到集合中,全部顶点加入集合后就得到所需的最小生成树 .下面来具体讲下:克鲁斯卡尔算法方法:将图中边按其权值由小到大的次序顺序选取,若选边后不形成回路,则保留作为一条边,若形成回路则除去.依次选够(n-1)条边,即得最小生 阅读全文
摘要:
最小生成树。Kruskal 算法:其中应用并查集。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 5 using namespace std; 6 7 typedef struct 8 { 9 int a, b;10 int d;11 }node;12 13 node w[5002];14 int set[102];15 16 int cmp(const void *a, const void *b)17 {18 node *x=(node *)a;19 node *y=(node 阅读全文