您的位置:首页 > 其它

PKU1258,模板题,prime算法就可以直接套用这个模板

2014-07-06 20:11 267 查看
模板题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <deque>
#include <set>
using namespace std;
#define N 102
#define inf 9999999

int dis

;
int vis
;
int g
;
int map

;
int n;

void Prime(){
int mark=2;
int i,j;
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++){
g[i] = dis[0][i];
}
vis[0] =1;
int tmp;
int sum=0;
int k;
for(i=1;i<n;i++){//要从1开始
tmp = inf;
for(j=0;j<n;j++){
if(tmp>g[j] && vis[j]==0){
tmp = g[j];
k = j;
}
}
if(tmp == inf){
mark = 1;
break;
}
else{
vis[k] = 1;
sum+=tmp;
for(j=0;j<n;j++){
if(vis[j]==0 && dis[k][j]<g[j]){
g[j] = dis[k][j];//新加入的点与原集合里的进行比较
}
}
}
}
if(mark!=1){
printf("%d\n",sum);
}
}

int main(){
int i,j;

while(~scanf("%d",&n)){
memset(dis,0,sizeof(dis));
memset(map,0,sizeof(map));
memset(g,0,sizeof(g));
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&map[i][j]);
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
dis[i][j] = map[i][j];
}
}
Prime();
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐