Gtt1025 2016-04-28 04:03 采纳率: 66.7%
浏览 920

为什么,我向图中插入顶点老是失败呢,就是InsertVex那个函数

Graph.h
struct Vex
{
int num;
char name[20];
char desc[1024];
};
struct Edge
{
int vex1;
int vex2;
int weight;
};
class CGraph
{
private:
int m_aAdjMatrix[20][20];
Vex m_aVexs[20];
int m_nVexNum;
public:
CGraph(int M_aAdjMatrix[20][20], Vex M_aVexs[20], int M_nVexNum);
CGraph(void);
~CGraph(void);
void setVex(Vex sVex);
bool InsertVex(Vex sVex);
bool InsertEdge(Edge sEdge);
Vex GetVex(int v);
int FindEdge(int v, Edge aEdge[]);
void Init(void);
int GetVexNum(void);
};
#endif

Graph.cpp
#include <iostream>
#include <stdlib.h>
#include "Graph.h"
using namespace std;
CGraph::CGraph(int M_aAdjMatrix[20][20], Vex M_aVexs[20], int M_nVexNum)
{
    for (int i = 0; i < MAX_VERTEX_NUM; i++)
    {
        for (int j = 0; j < MAX_VERTEX_NUM; j++)
        {
            m_aAdjMatrix[i][j] = M_aAdjMatrix[i][j];
        }
    }
    for (int m = 0; m < MAX_VERTEX_NUM; m++)
    {
        m_aVexs[m].num = M_aVexs[m].num;
        strcpy(m_aVexs[m].name, M_aVexs[m].name);
        strcpy(m_aVexs[m].desc, M_aVexs[m].desc);
    }
    m_nVexNum = M_nVexNum;

}
CGraph::CGraph(void)
{

}
CGraph::~CGraph(void)
{

}
void CGraph::setVex(Vex sVex)
{
    m_aVexs[m_nVexNum].num = sVex.num;
    strcpy(m_aVexs[m_nVexNum].name, sVex.name);
    strcpy(m_aVexs[m_nVexNum].desc, sVex.desc);
}
bool CGraph::InsertVex(Vex sVex)

{
    if (m_nVexNum == MAX_VERTEX_NUM)
    {
        return false;
    }
    else 
    {
        m_aVexs[m_nVexNum].num = sVex.num;
        strcpy(m_aVexs[m_nVexNum].name, sVex.name);
        strcpy(m_aVexs[m_nVexNum].desc, sVex.desc);
        //setVex(sVex);
        m_nVexNum++;
    //  m_aVexs[m_nVexNum++] = sVex;
        return true;
    }
}
bool CGraph::InsertEdge(Edge sEdge)
{
    if (sEdge.vex1 < 0 || sEdge.vex1 >= m_nVexNum || sEdge.vex2 < 0 || sEdge.vex2 >= m_nVexNum)
    {
        return false;
    }
    m_aAdjMatrix[sEdge.vex1][sEdge.vex2] = sEdge.weight;
    m_aAdjMatrix[sEdge.vex2][sEdge.vex1] = sEdge.weight;
    return true;

}
Vex CGraph::GetVex(int v)
{
    return m_aVexs[v];
}
int CGraph::FindEdge(int v, Edge aEdge[])
{
    int k = 0;

    for (int i = 0; i < m_nVexNum; i++)
    {
        aEdge[i].vex1 = v;
        aEdge[i].vex2 = i;
        if ((aEdge[i].weight != 0 )&& (aEdge[i].vex1 == v )&& (aEdge[i].vex2==i))
        {
            k++;
        }

    }
    return k;
}
void CGraph::Init(void)
{

    for (int i = 0; i < MAX_VERTEX_NUM; i++)
    {
        for (int j = 0; j < MAX_VERTEX_NUM; j++)
        {
            m_aAdjMatrix[i][j] = 0;
        }
    }
    for (int m = 0; m < MAX_VERTEX_NUM; m++)
    {
        m_aVexs[m].num = 0;
        strcpy(m_aVexs[m].name, "0");
        strcpy(m_aVexs[m].desc, "0");
    }
    int m_nVexNum = 0;
}
int CGraph::GetVexNum()
{
    return m_nVexNum;
}
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 MATLAB动图的问题
    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名