• 大小: 28KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: 其他
  • 标签: c语言  

资源简介

最小生成树的源代码,不需要修改,可直接使用,多加支持,谢谢

资源截图

代码片段和文件信息

#include “DS.h“
#include “ALGraph.h“


/*查找顶点v在邻接表存储法中的下标*/
int LocateVex1(ALGraph G char v)
{
    int i;
    for(i = 0; i < G.vexnum; i++)
        if(G.vertices[i].data == v)
            return i;               /*找到顶点返回下标*/
    return -1;
}

/*在邻接表中插入顶点v的邻接点w*/
int InsertList1(ALGraph &G int i int j)
{
       ArcNode *p;
       if(i==-1||j==-1||i==j)
        return ERROR;
       p=(ArcNode *)malloc(sizeof(ArcNode));
       p->adjvex=j;       /*插入邻接点*/
       p->nextarc=NULL;
       if(!G.vertices[i].firstarc)
        G.vertices[i].firstarc=p;  /*头插法*/
       else
       {
        p->nextarc=G.vertices[i].firstarc->nextarc;
        G.vertices[i].firstarc->nextarc=p;
       }
    return 1;
}
/*请写出有向带权图的邻接表的生成函数*/
int CreateDN1(ALGraph &G)
{
    int i j kw;
    char v1 v2;
    printf(“请输入有向图G的顶点数和边数:“);
    scanf(“%d %d“ &G.vexnum &G.arcnum);
    printf(“请输入%d个顶点名字(以空格区分):“ G.vexnum);
    for(i = 0; i < G.vexnum; i++)
    {
        scanf(“ %c“ &G.vertices[i].data);  /*请注意输入格式*/
        G.vertices[i].firstarc = NULL; /*邻接表初始化为空*/
    }
    for(k = 1; k <= G.arcnum; k++)
    {
        printf(“请输入第%d条边的两个顶点(以字符表示,字符间以空格区分)和权值:“ k);
        scanf(“ %c %c %d“ &v1 &v2&w);  /*请注意输入格式*/
        i = LocateVex1(G v1);       /*确定v1和v2的下标*/
        j = LocateVex1(G v2);
        InsertList1(G i j);   /*生成各自的邻接表(记录权值)*/
    }
    return OK;
}


/*查找顶点v在邻接矩阵存储法中的下标*/
int LocateVex(MGraph G char v)
{
    int i;
    for(i = 0; i < G.vexnum; i++)
        if(G.vexs[i] == v)
            return i;
    return -1;
}

/*请写出有向带权图的邻接矩阵的生成函数*/
Status CreateDN(MGraph &G)
{
    int i j k value;
    char v1 v2;
    printf(“请输入图G的顶点数和边数:“);
    scanf(“%d %d“ &G.vexnum &G.arcnum);
    printf(“请输入%d个顶点名字(以空格区分):“ G.vexnum);
    for(i = 0; i < G.vexnum; i++)
        scanf(“ %c“ &G.vexs[i]);  /*请注意输入格式*/
    for(i = 0; i < G.vexnum; i++)
        for(j = 0; j < G.vexnum; j++)
            G.arcs[i][j] = MAX;
    for(k = 1; k <= G.arcnum; k++)
    {
        printf(“请输入第%d条边的两个顶点(以字符表示,字符间以空格区分)及权值:“ k);
        scanf(“ %c %c %d“ &v1 &v2 &value);  /*请注意输入格式*/
        i = LocateVex(G v1);       /*确定v1和v2的下标*/
        j = LocateVex(G v2);
        if(i >= 0 && j >= 0)        /*修改邻接矩阵的信息*/
            G.arcs[i][j] = value;
    }
    return OK;
}


/*在邻接表中插入顶点v的邻接点w*/
int InsertList(ALGraph &G int i int j)
{
       ArcNode *p;
       if(i==-1||j==-1||i==j)
        return ERROR;
       p=(ArcNode *)malloc(sizeof(ArcNode));
       p->adjvex=j;       /*插入邻接点*/
       p->nextarc=NULL;
       if(!G.vertices[i].firstarc)
        G.vertices[i].firstarc=p;  /*头插法*/
       else
       {
        p->nextarc=G.vertices[i].firstarc->nextarc;
        G.vertices[i].firstarc->nextarc=p;
       }
    return 1;
}


/*键盘输入数据,分别建立一个有向图的邻接表和一个无向图的邻接矩阵。
(2)输出该邻接表和邻接矩阵。
(3)以有向图的邻接表为基础输出它的拓扑排序序列。
(4)以无向图的邻接矩阵为基础实现最小生成树的PRIM算法。
(5)以有向图的邻接矩阵为基础实现Dijkstra算法输出单源点到其它顶点的

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-07-02 21:48  minTree\
     文件         744  2018-06-24 15:56  minTree\ALGraph.h
     目录           0  2018-07-02 21:48  minTree\bin\
     目录           0  2018-07-02 21:48  minTree\bin\Debug\
     文件       39910  2018-06-24 16:12  minTree\bin\Debug\minTree.exe
     文件         281  2018-06-24 15:42  minTree\DS.h
     文件        8905  2018-06-24 16:06  minTree\main.cpp
     文件         336  2018-06-02 14:56  minTree\MGraph.h
     文件        1262  2018-06-02 16:13  minTree\minTree.cbp
     文件        1111  2018-06-24 16:12  minTree\minTree.depend
     文件         740  2018-06-24 16:23  minTree\minTree.layout
     目录           0  2018-07-02 21:48  minTree\obj\
     目录           0  2018-07-02 21:48  minTree\obj\Debug\
     文件       13971  2018-06-24 16:12  minTree\obj\Debug\main.o
     文件        3836  2018-06-24 16:12  minTree\obj\Debug\SqStack.o
     文件        1060  2018-06-02 15:29  minTree\SqStack.cpp
     文件         539  2018-06-24 15:57  minTree\SqStack.h

评论

共有 条评论