USACO:Agri-Net解题报告
2011-03-18 14:22
351 查看
思路:最小生成树,prim算法解.
/*
ID: xpli1
PROG: agrinet
LANG: C
*/
#include <stdio.h>
#include <math.h>
#include <ctype.h>
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
#define INT_MAX 0x7fffffff
#define IN stdin
#define OUT stdout
int weight[101][101];
int distance[101];
int source[101];
int intree[101];
int N,treesize,treecost;
void prim()
{
int i,j,k;
for(i=0; i<N; i++){
distance[i] = INT_MAX;
source[i] = -1;
intree[i] = 0;
}
treesize = 1;
treecost = 0;
intree[0] = 1;
for(i=1; i<N; i++){
distance[i] = weight[0][i];
source[i] = 0;
}
while(treesize < N){
int MIN = INT_MAX;
for(j=0; j<N; j++){
if(!intree[j] && MIN > distance[j]){
k = j;
MIN = distance[k];
}
}
treesize++;
treecost += distance[k];
intree[k] = 1;
for(j=0; j<N; j++){
if(!intree[j] && distance[j] > weight[k][j]){
distance[j] = weight[k][j];
source[j] = k;
}
}
}
return;
}
int main(void)
{
FILE* fin = fopen("agrinet.in","r");
FILE* fout = fopen("agrinet.out","w");
fscanf(IN,"%d",&N);
int i=0;
while(i<N*N) {fscanf(IN,"%d",&weight[i/N][i%N]); i++;}
prim();
fprintf(OUT,"%d/n",treecost);
return 0;
}
/*
ID: xpli1
PROG: agrinet
LANG: C
*/
#include <stdio.h>
#include <math.h>
#include <ctype.h>
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
#define INT_MAX 0x7fffffff
#define IN stdin
#define OUT stdout
int weight[101][101];
int distance[101];
int source[101];
int intree[101];
int N,treesize,treecost;
void prim()
{
int i,j,k;
for(i=0; i<N; i++){
distance[i] = INT_MAX;
source[i] = -1;
intree[i] = 0;
}
treesize = 1;
treecost = 0;
intree[0] = 1;
for(i=1; i<N; i++){
distance[i] = weight[0][i];
source[i] = 0;
}
while(treesize < N){
int MIN = INT_MAX;
for(j=0; j<N; j++){
if(!intree[j] && MIN > distance[j]){
k = j;
MIN = distance[k];
}
}
treesize++;
treecost += distance[k];
intree[k] = 1;
for(j=0; j<N; j++){
if(!intree[j] && distance[j] > weight[k][j]){
distance[j] = weight[k][j];
source[j] = k;
}
}
}
return;
}
int main(void)
{
FILE* fin = fopen("agrinet.in","r");
FILE* fout = fopen("agrinet.out","w");
fscanf(IN,"%d",&N);
int i=0;
while(i<N*N) {fscanf(IN,"%d",&weight[i/N][i%N]); i++;}
prim();
fprintf(OUT,"%d/n",treecost);
return 0;
}
相关文章推荐
- POJ 1258 Agri-Net 解题报告
- 1258 Agri-Net 解题报告
- B - Agri-Net解题报告(吴忠健)
- POJ - 1258 Agri-Net解题报告
- Pku acm 1258 Agri-Net数据结构题目解题报告(四) ----最小生成树:prim算法
- 2011.11.2 poj1258 Agri-Net 解题报告
- USACO 2.3.2 Cow Pedigrees 解题报告
- usaco垃圾陷阱解题报告
- USACO Network of Schools 解题报告
- BZOJ 1694 & 1742 [Usaco 2005 nov] 区间DP 解题报告
- USACO 3.1 Agri-Net
- USACO Picture 解题报告
- usaco Name That Number 解题报告
- USACO4.3.3 街道赛跑 解题报告
- USACO历年比赛题目列表,测试数据和解题报告下载
- USACO Street Race 解题报告
- USACO All Latin Squares 解题报告
- USACO Frame Up 解题报告
- USACO Spinning Wheels 解题报告
- USACO :Longest Prefix解题报告