1751 Highways 解题报告 2
2008-12-22 11:20
369 查看
AccecptTime: 2008-12-22 11:19:49
Language: C++
Memory: 2424K
Time: 94MS
Errors: No
Algorithm: Prim
#include <stdio.h>
#include <memory.h>
#include <algorithm>
#include <iostream>
using namespace std;
// 最大值
#define INF 99999999
#define len(i,j) ((i)*(i) + (j)*(j))
// 最多的边数
#define N 751
// 路径储存
int road
;
int main()
{
int n,m,count;
int i,j,k,l;
int mink,min,res;
scanf("%d",&n);
int x
,y
;
for(i = 1; i <= n; i++)
scanf("%d%d",&x[i],&y[i]);
for( i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
if(i == j)
road[i][j] = -1;
else
road[i][j] = road[j][i] = len(x[i] - x[j],y[i] - y[j]);
scanf("%d",&m);
int u,v;
for(i = 0; i < m;i++) {
scanf("%d%d",&u,&v);
road[v][u] = road[u][v] = 0;
}
//Prim最小生成树
res = 0;
int lesscost
;
//用于记录边的源节点
int ori
;
for(i = 1; i <= n;i++) {
lesscost[i] = road[1][i];
ori[i] = 1;
}
for( i = 1; i < n ;i++) {
min = INF;
for(j = 1; j <= n; j++)
if(lesscost[j] >= 0 && lesscost[j] < min) {
min = lesscost[j];
mink = j;
}
if(min > 0)
printf("%d %d/n",ori[mink],mink);
// 将刚加入集合的节点的所有边和现有边做一个比较,保留小的边
for(j = 1; j <= n;j++)
if(lesscost[j] > road[mink][j]) {
lesscost[j] = road[mink][j];
ori[j] = mink;
}
}
}
经过波波思想的洗礼,我决定用Prim将那些"应该用Prim的题目"再做一遍,果然,Prim太强大了...只用了94MS,比之前用Kruskal快了3倍...我开始怀疑自己的Kruskal是否已经足够强了.
Language: C++
Memory: 2424K
Time: 94MS
Errors: No
Algorithm: Prim
#include <stdio.h>
#include <memory.h>
#include <algorithm>
#include <iostream>
using namespace std;
// 最大值
#define INF 99999999
#define len(i,j) ((i)*(i) + (j)*(j))
// 最多的边数
#define N 751
// 路径储存
int road
;
int main()
{
int n,m,count;
int i,j,k,l;
int mink,min,res;
scanf("%d",&n);
int x
,y
;
for(i = 1; i <= n; i++)
scanf("%d%d",&x[i],&y[i]);
for( i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
if(i == j)
road[i][j] = -1;
else
road[i][j] = road[j][i] = len(x[i] - x[j],y[i] - y[j]);
scanf("%d",&m);
int u,v;
for(i = 0; i < m;i++) {
scanf("%d%d",&u,&v);
road[v][u] = road[u][v] = 0;
}
//Prim最小生成树
res = 0;
int lesscost
;
//用于记录边的源节点
int ori
;
for(i = 1; i <= n;i++) {
lesscost[i] = road[1][i];
ori[i] = 1;
}
for( i = 1; i < n ;i++) {
min = INF;
for(j = 1; j <= n; j++)
if(lesscost[j] >= 0 && lesscost[j] < min) {
min = lesscost[j];
mink = j;
}
if(min > 0)
printf("%d %d/n",ori[mink],mink);
// 将刚加入集合的节点的所有边和现有边做一个比较,保留小的边
for(j = 1; j <= n;j++)
if(lesscost[j] > road[mink][j]) {
lesscost[j] = road[mink][j];
ori[j] = mink;
}
}
}
经过波波思想的洗礼,我决定用Prim将那些"应该用Prim的题目"再做一遍,果然,Prim太强大了...只用了94MS,比之前用Kruskal快了3倍...我开始怀疑自己的Kruskal是否已经足够强了.
相关文章推荐
- 1751 Highways 解题报告
- Uva 1393 - Highways 解题报告(递推)
- C - Highways解题报告(吴忠健)
- 2011.11.1 poj2485 Highways 解题报告
- POJ 2485 Highways 解题报告
- 2485 Highways 解题报告
- Pku acm 2485 Highways数据结构题目解题报告(三) ----最小生成树:prim算法
- 2485 Highways 解题报告 2
- poj 3087解题报告
- Add Binary | leetcode 67 【Java解题报告】
- poj 1927 计算几何 解题报告
- UVa 解题报告索引
- Codeforces Round #297 (Div. 2) B. Pasha and String 解题报告
- POJ 2420 模拟退火 解题报告
- Fibonacci Again解题报告
- HNOI2015解题报告
- POJ 1837 Balance 解题报告(动态规划)
- HDU 4627 The Unsolvable Problem 解题报告
- POJ 2513 Colored Sticks 解题报告
- pku 1422 Air Raid 最小路径覆盖图 解题报告