回 帖 发 新 帖 刷新版面

主题:[原创]怎么都调试不通,求救

用的是vc,从主函数输出数组元素总是-858993460,要自杀了。。。。
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#define MAXVALUE 100           //定义最大的量
typedef int adjmatrix[10][10];
typedef int vertextype;
typedef struct
{
    vertextype vex[10];
    adjmatrix arcs;         //邻接矩阵
    int arcnum;
}mgraph;

void CreatGraph(mgraph g)
{
    int i,j,k,w;
    printf("请输入十个办公地点(用V1,V2,V3~V10表示)之间连线的数量:\n");
    scanf("%d",&g.arcnum);
    if(g.arcnum>=10)
        goto lable;
    else
    {
        printf("输入边数错误,请重新输入:\n");
        scanf("%d",&g.arcnum);
    }
lable:for(i=1;i<11;i++)
        g.vex[i]=i;      //构造顶点序列
    for(i=1;i<11;i++)
        for(j=1;j<11;j++)
            g.arcs[i][j]=MAXVALUE;      //初始化邻接矩阵 
    for(k=0;k<g.arcnum;k++)
    {
loop:printf("请输入布线的起、终点的下标序号和对应的费用:\n");
        scanf("%d %d %d",&i,&j,&w);//输入边的起、终点及其权值
        if(i>g.arcnum||j>g.arcnum)
        {
            printf("输入错误,请重新输入:\n");
            goto loop;
        }
    g.arcs[i][j]=g.arcs[j][i]=w; //给邻接矩阵赋值    
    }
}

void PrimMinSpanTree(mgraph g,int k)      //用prim算法,从顶点Vk出发,构造图g的最小生成树T,输出T的各条边
{
    int i,j,min,p;
    struct
    {
        int adjvex;
        int lowcost;
    }closedge[10];      //定义从顶点集合U到V-U的代价最小的边的辅助数组closedge[]
    for(j=1;j<=10;j++)
        if (j!=k)
        {
            closedge[j].adjvex=k;
            closedge[j].lowcost=g.arcs[k][j];
        }     //初始化辅助数组
        closedge[k].lowcost=0;    //初始化U={Vk}
        for(i=1;i<10;i++)        //选择其余9个办公室
        {
            p=1;
        min=10000;
        for(j=1;j<10;j++)   //求出T的下一个顶点
            if (closedge[j].lowcost!=0&&closedge[j].lowcost<min)
            {
                min=closedge[j].lowcost;
                p=j;
            }           //选出最小权值的顶点Vp
            printf("%d--%d: %d\n",closedge[p].adjvex,p,min);   //输出最小边及其权值
            closedge[p].lowcost=0;    //将新的顶点Vp加到最小生成树T上,并入U集合
            for(j=1;j<10;j++)
                if (g.arcs[p][j]<closedge[j].lowcost)
                {
                    closedge[j].lowcost=g.arcs[p][j];
                    closedge[j].adjvex=p;     //重新选择最小边
                }
        }
}

void main()
{
    int k1=3;
    mgraph g;
    CreatGraph(g);
    printf("10个办公地点布线图的邻接矩阵:\n");
    PrimMinSpanTree(g,k1);
    system("pause");
}   //main函数

回复列表 (共1个回复)

沙发

参数传递有问题:
void CreatGraph(mgraph g)
这个地方的g应该为 &g 或者 *g;

main()函数中的mgraph g;定义也是同样的
楼主再试试看

我来回复

您尚未登录,请登录后再回复。点此登录或注册