m0_63761872 2022-05-20 17:27 采纳率: 100%
浏览 14
已结题

数据结构图pta,c++

下面这个代码在PTA上面测试是对的,在其他编译器上显示process returned -1073741571(0xC00000FD),但是如果把MVNum改为100在其他编译器就对了,求指教。谢谢

#include <iostream>

using namespace std;
typedef int Status;
#define OK 1
#define ERROR -1
#define MaxInt 32767
#define MVNum 1000
typedef int VerTexType;
typedef int ArcType;
int cost=0;
typedef struct
{
    VerTexType vexs[MVNum];
    ArcType arcs[MVNum][MVNum];
    int vexnum,arcnum;
}AMGraph;
struct
{
    VerTexType adjvex;
    ArcType lowcost;
}closedge[MVNum];
int LocateVex(AMGraph &G,VerTexType u)
{    
 for(int i=0;i<G.vexnum;i++)
    {        
  if(u==G.vexs[i]) return i;        
 }
 return -1;
}

Status CreateUDN(AMGraph& G)
{
    cin>>G.vexnum>>G.arcnum;
    for(int i=0;i<=G.vexnum;i++)
        G.vexs[i]=i;
    for(int i=0;i<=G.vexnum;i++)
    for(int j=0;j<=G.vexnum;j++)
    {
        if(i==j)
            G.arcs[i][j]=0;
        else
            G.arcs[i][j]=MaxInt;
    }
    for(int k=0;k<G.arcnum;k++)
    {
        int x,y,w;
        cin>>x>>y>>w;
        G.arcs[x][y]=G.arcs[y][x]=w;
    }
    return OK;
}
void MiniSpanTree_Prim(AMGraph G,VerTexType u)
{
    int k;
    k=LocateVex(G,u);
    for(int j=0;j<=G.vexnum;j++)
        if(j!=k)
    closedge[j]={u,G.arcs[k][j]};
    for(int i=1;i<G.vexnum;i++)
    {
        int mincost=MaxInt;
            k=-1;
        for(int j=1;j<=G.vexnum;j++)
        {
            if(closedge[j].lowcost!=0&&closedge[j].lowcost<mincost)
            {
                mincost=closedge[j].lowcost;
                k=j;
            }
        }
        if(k!=-1)
        {
            closedge[k].lowcost=0;
            cost+=mincost;
        }
        else
            break;
        for(int j=1;j<=G.vexnum;j++)
        {
            if(G.arcs[k][j]!=0&&G.arcs[k][j]<closedge[j].lowcost)
            {
                closedge[j]={G.vexs[k],G.arcs[k][j]};
            }
        }

    }
}
int main()
{
    AMGraph G;
    CreateUDN(G);
    MiniSpanTree_Prim(G,1);
    int flag=1;
    for(int i=1;i<=G.vexnum;i++)
        if(closedge[i].lowcost!=0)
        {
            flag=0;
            break;
        }
    if(flag)
    {
        cout<<"YES"<<endl;
        cout<<cost;
    }
    else
    {
        cout<<"NO"<<endl;
        cout<<"-1";
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 逍遥xiaoy 2022-05-20 17:48
    关注

    超出了栈的默认内存空间,如果函数中定义的数组太大会导致内存溢出,就直接崩溃报错了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    问题事件

    • 系统已结题 6月21日
    • 已采纳回答 6月13日
    • 创建了问题 5月20日

    悬赏问题

    • ¥15 关于#java#的问题,请各位专家解答!(相关搜索:java程序)
    • ¥15 linux tsi721的驱动编译后 insmod 提示 报错
    • ¥20 multisim测数据
    • ¥15 求无向连通网的所有不同构的最小生成树
    • ¥15 模拟器的framebuffer问题
    • ¥15 opencv检测轮廓问题
    • ¥15 单点式登录SSO怎么爬虫获取动态SSO_AUTH_ACCESS_Token
    • ¥30 哈夫曼编码译码器打印树形项目
    • ¥20 求完整顺利登陆QQ邮箱的python代码
    • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL