代码:
#include<bits\stdc++.h>
using namespace std;
#define LEN 1002
#define MAX INT_MAX
int edge[LEN][LEN];
int dijkstra(int n){
/*求最小生成树,edge是一个n*n数组,
edge[i][j]表示i,j间的权值。为MAX表示无边。
*/
int include[n];
int mine[n];
memset(include,0,n);
include[0]=1;
for(int i=0;i<n;i++)
mine[i]=edge[0][i];
int cost=0;
for(int i=1;i<n;i++){
int min=MAX;
int minv=-1;
for(int j=0;j<n;j++){
if(include[j]==0&&mine[i]<min){
min=mine[i];
minv=j;
}
}
if(min==MAX)return -1;
cost+=min;
include[minv]=1;
for(int j=0;j<n;j++)
if(include[j]==0&&mine[j]>edge[minv][j])
mine[j]=edge[minv][j];
}
return cost;
}