Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

.........难道有机关?求大大赐教~

Posted by mixter at 2005-09-01 15:48:06 on Problem 1258
#include <stdio.h>
#include <iostream>
using namespace std;
#define Maxim 10000000                              
#define n 101   
int kase;
typedef int AdjMatrix[n][n];                          
typedef struct{                                      
	int fromvex,tovex;                                
	int length;                                       
}TreeEdgeNode;
typedef TreeEdgeNode MST[n-1];                       
AdjMatrix G;                                          
MST T;                                               

void InitCandidateSet(AdjMatrix G,MST T,int r){
	int i,k=0;
	for(i=0;i<kase;i++)                               
		if(i!=r){                                     
			T[k].fromvex = r;                        
			T[k].tovex   = i;                         
			T[k++].length= G[r][i];                    
		}
}


int SelectLightEdge(MST T,int k){
	int min = Maxim,i,minpos;
	for(i=k;i<kase-1;i++)                                 
		if(T[i].length < min){
			min = T[i].length;
			minpos = i;                              
		}
		return minpos;                                     
}


void McandidateSet(AdjMatrix G,MST T,int k,int v){
	int i,d;
	for(i=k;i<kase-1;i++){                               
		d = G[v][T[i].tovex];                          
		if(d<T[i].length){
			T[i].length = d;
			T[i].fromvex= v;                          
		}
	}
}
void PrimMST(AdjMatrix G,MST T,int r){
	int k,m,v;
	TreeEdgeNode e;	
	InitCandidateSet(G,T,r);                           
    for(k=0;k<kase-1;k++){                               
        m = SelectLightEdge(T,k);                     
		e   = T[m];
		T[m]= T[k];
		T[k]= e;                                                  
        v   = T[k].tovex;                              
        McandidateSet(G,T,k+1,v);                 
    }
}
__int64 PrintMST(MST T){
	int i;
	__int64 sum=0;
	for(i=0;i<kase-1;i++){
		sum+=T[i].length;
	}
	return sum;
}
void main(){
	freopen("test.txt","r",stdin);
	int i,j;
	cin>>kase;
	for(i=0;i<kase;i++)
		for(j=0;j<kase;j++){
			cin>>G[i][j];
			if(i==j)
				G[i][j]= Maxim;
		}                                                      
	PrimMST(G,T,0);                              
	printf("%I64d\n",PrintMST(T));
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator