c语言:最小生成树之Prim算法

c语言:最小生成树之Prim算法_第1张图片



#include 
#include 
#define MaxNum 10000

typedef struct
{
    int fromvex, tovex;
    int weight;
} Edge;
typedef Edge *EdgeNode;
int n;
int arcnum;

void CreatMatrix(int GA[n+1][n+1])
{
    int i, j, k, e;



    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
        {
            if(i==j)
            {
                GA[i][j]=0;
            }
            else
            {
                GA[i][j]=MaxNum;
            }
        }
    }

    printf("请输入边的信息,按照起点,终点,权值的形式输入:\n");

    for(k=1; k<=arcnum; k++)
    {
        scanf("%d,%d,%d",&i,&j,&e);
        GA[i][j]=e;
        GA[j][i]=e;
    }

}

void InitEdge(EdgeNode GE,int m)
{
    int i;
    for(i=1; i<=m; i++)
    {
        GE[i].weight=0;
    }
}


void GetEdgeSet(int GA[n+1][n+1],EdgeNode GE)
{
    int i, j, k = 1;
    for(i=1; i<=n; i++)
    {
        for(j=i+1; j<=n; j++)
        {
            if(GA[i][j] !=0 && GA[i][j] != MaxNum)
            {
                GE[k].fromvex = i;
                GE[k].tovex = j;
                GE[k].weight = GA[i][j];
                k++;
            }
        }
    }
}


void SortEdge(EdgeNode GE,int m)
{
    int i,j,k;
    Edge temp;
    for(i=1; i GE[j].weight)
            {
                k=j;
            }
        }
        if(k!=i)
        {
            temp = GE[i];
            GE[i]=GE[k];
            GE[k]=temp;
        }
    }
}


void Prim(int GA[n+1][n+1],EdgeNode T)
{
    int i,j,k,min,u,m,w;
    Edge temp;

    k=1;
    for(i=1; i<=n; i++)
    {
        if(i!=1)
        {
            T[k].fromvex=1;
            T[k].tovex=i;
            T[k].weight=GA[1][i];
            k++;
        }
    }

    for(k=1; k




你可能感兴趣的:(c)