Prime算法
#include
using namespace std;
const int INF=10e5;
const int MAX_N=20;
typedef struct {
int adjvex;
int lowcost;
} Element;
int arc[MAX_N][MAX_N]= {
{INF,34,46,INF,INF,19},
{34,INF,INF,INF,12,INF},
{46,INF,INF,17,INF,25},
{INF,INF,17,INF,38,25},
{INF,12,INF,38,INF,26},
{19,INF,25,25,26,INF}
};
Element shortEdge[MAX_N];
int n=6;
void Prime(int x) {
int i,j,k,min;
for(i=0; i<n; i++) {
shortEdge[i].adjvex=x;
shortEdge[i].lowcost=arc[x][i];
}
shortEdge[x].lowcost=0;
for(i=0; i<n-1; i++) {
min=INF;
for(j=0; j<n; j++) {
if(shortEdge[j].lowcost!=0&&shortEdge[j].lowcost<min) {
min=shortEdge[j].lowcost;
k=j;
}
}
cout<<shortEdge[k].adjvex<<"--"<<k<<endl;
shortEdge[k].lowcost=0;
for(j=0; j<n; j++) {
if(shortEdge[j].lowcost!=0&&arc[j][k]!=0&&arc[j][k]<shortEdge[j].lowcost) {
shortEdge[j].lowcost=arc[j][k];
shortEdge[j].adjvex=k;
}
}
}
}
int main() {
Prime(0);
return 0;
}
Kruskal
#include
#include
using namespace std;
const int INF=10e5;
const int MAX_N=20;
typedef struct {
int adjvex;
int lowcost;
} Element;
int arc[MAX_N][MAX_N]= {
{INF,34,46,INF,INF,19},
{34,INF,INF,INF,12,INF},
{46,INF,INF,17,INF,25},
{INF,INF,17,INF,38,25},
{INF,12,INF,38,INF,26},
{19,INF,25,25,26,INF}
};
char t[MAX_N]="ABCDEFGH";
int flag[MAX_N][MAX_N];
int f[MAX_N];
int n=6;
int F(int a) {
int b=a;
while(a!=f[a]) {
a=f[a];
}
return a;
}
pair<int,int> Search() {
int a,b,min=INF;
for(int i=0; i<n; i++) {
for(int j=0; j<i; j++) {
if(!flag[i][j]&&arc[i][j]<min) {
min=arc[i][j];
a=i;
b=j;
}
}
}
return pair<int,int>(a,b);
}
void Kruskal() {
int i,j;
for(i=0; i<n; i++) {
f[i]=i;
}
for(i=0; i<n-1;) {
pair<int,int> p=Search();
if(F(p.first)!=F(p.second)) {
cout<<t[p.first]<<"--"<<t[p.second]<<":"<<arc[p.first][p.second]<<endl;
f[F(p.second)]=F(p.first);
i++;
}
flag[p.first][p.second]=1;
flag[p.second][p.first]=1;
}
}
int main() {
Kruskal();
return 0;
}