#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define MAX 300
#define IN 10000
typedef struct{//有向图
char vex[MAX];//顶点
int edge[MAX][MAX];//邻接矩阵
int vexnum,arcnum;//顶点数、边数
}Mgraph;
void creat(Mgraph &g){
int i,j,k,w;
printf("input vexnum and arcnum:");
scanf("%d%d",&g.vexnum,&g.arcnum);
cout<<"please input everynode info:\n";
for(int i=0;i<g.vexnum;i++){
cin>>g.vex[i];
}
for(int i=0;i<g.vexnum;i++){
for(int j=0;j<g.vexnum;j++){
if(i==j)g.edge[i][j]=0;
else g.edge[i][j]=IN;
}
}
for(int i=0;i<g.arcnum;i++){
cout<<"input (start end much):"<<endl;
int a,b,c;
cin>>a>>b>>c;
g.edge[a][b]=c;
}
}
void prim(Mgraph &g){
int min,j,i,k;
int ad[MAX],low[MAX];
low[0]=0;
ad[0]=0;
for(i=1;i<g.vexnum;i++){
low[i]=g.edge[0][i];
ad[i]=0;
}
for(i=1;i<g.vexnum;i++){
min=IN;
j=1;
k=0;
while(j<g.vexnum){
if(low[j]!=0&&low[j]<min){
min=low[j];
k=j;
}
j++;
}
cout<<g.vex[ad[k]]<<" "<<g.vex[k]<<" "<<low[k]<<endl;
low[k]=0;
for(j=1;j<g.vexnum;j++){
if(low[j]!=0&&g.edge[k][j]<low[j]){
low[j]=g.edge[k][j];
ad[j]=k;
}
}
}
}
int main(){
Mgraph g;
creat(g);
prim(g);
}
c语言数据结构---prim---有向邻接矩阵
最新推荐文章于 2024-05-04 13:33:38 发布