模板题
#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[N][N];
int vis[N];
int g[N];
int map[N][N];
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;
}
PKU1258,模板题,prime算法就可以直接套用这个模板
最新推荐文章于 2023-05-22 11:23:45 发布