| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我就用scanf和printf啊,照样AC,应该是自己写的code的问题吧我就用scanf和printf啊,照样AC,应该是自己写的code的问题吧
code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define len 30
const int INF=1000000000;
int maze[len][len];
int v;
bool init(){
int r,k,i,x,y;
char s[2],ss[2];
memset(maze,0,sizeof(maze));
if(scanf("%d",&v)==1&&v){
for(i=1;i<v;i++){
scanf("%s%d",s,&r);
while(r--){
scanf("%s%d",ss,&k);
x=s[0]-'A'; y=ss[0]-'A';
maze[x][y]=maze[y][x]=k;
}
}
return true;
}
else return false;
}
int prim(int mat[][len]){
int i,j,k,ret=0,min[len];
bool V[len];
for(i=0;i<v;i++)
min[i]=INF,V[i]=false;
for(min[j=0]=0;j<v;j++){
for(k=-1,i=0;i<v;i++)
if(!V[i]&&(k==-1||min[i]<min[k]))
k=i;
for(V[k]=true,ret+=min[k],i=0;i<v;i++)
if(!V[i]&&mat[k][i]<min[i]&&mat[k][i]!=0)
min[i]=mat[k][i];
}
return ret;
}
int main(void){
int ans;
while(init()){
ans=prim(maze);
printf("%d\n",ans);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator