为了账号安全,请及时绑定邮箱和手机立即绑定
  • //CMap.cpp
    
    #include "CMap.h"
    #include <iostream>
    #include <vector>
    using namespace std;
    
    CMap::CMap(int capacity)
    {
        m_iCapacity = capacity;//图的最大顶点数
        m_iNodeCount = 0;//图的当前顶点数
        m_pNodeArray = new Node[m_iCapacity];//创建顶点数组
        m_pMatrix = new int[m_iCapacity* m_iCapacity];//创建邻接矩阵
        memset(m_pMatrix,0,m_iCapacity* m_iCapacity*sizeof(int));/初始化邻接矩阵
    }
    
    
    bool CMap::addNode(Node* pNode)
    {
        m_pNodeArray[m_iNodeCount].m_cData = pNode->m_cData;
        m_iNodeCount++;
        return true;
    }
    
    void CMap::resetNode()
    {
        for(int i = 0;i < m_iNodeCount,i++)
        {
            m_pNodeArray[i].m_blsVisited = false;
        }
    }
    //为边设置权值
    bool CMap::setValueToMatrixForDirectedGraph(int row,int col,int val)
    {
        m_pMatrix[row*m_iCapacity+col] = val;
        return true;
    }
    
    bool CMap::setValueToMatrixForUndirectedGraph(int row,int col,int val)
    {//无向图的邻接矩阵是对称的
        m_pMatrix[row*m_iCapacity+col] = val;
        m_pMatrix[col*m_iCapacity+row] = val;
        return true;
    }
    //根据权值判断两个顶点是否相连
    bool CMap::getValueFromMatrix(int row,int col,int& val)
    {
        val = m_pMatrix[row*m_iCapacity+col];
        return true;
    }
    
    void CMap::printMatrix()
    {
        for(int i = 0;i < m_iCapacity;i++)
        {
            for(int j = 0;j < m_iCapacity;j++)
            {
                cout << p_Matrix[i*mCapacity+k] << " ";
            }
            cout << endl;
        }
    }
    
    //深度优先搜索
    void CMap::depthFirstTraverse(int nodeIndex)
    {
        int value = 0;
        
        cout << m_pNodeArray[nodeIndex].m_cData << " ";
        m_pNodeArray[nodeIndex].m_blsVisited = true;
        
        //通过邻接矩阵判断是否与其他的顶点是否有连接
        for(int i = 0;i < m_iCapacity;i++)
        {
            getValFromMatrix(nodeIndex,i,value);
            if(value != 0)
            {
                if(pNodeArray[i].m_blsVisited)
                {
                    continue;
                }
                else{
                    depthFirstTraverse(i);
                }
            }
        }
    }
    
    CMap::~CMap()
    {
        delete []m_pNodeArray;
        delete []m_pMatrix;
    }


    查看全部
  • //CMap.h
    
    #include <vector>
    using namespace std;
    #include "Node.h"
    
    class CMap{
    public:
        CMap(int capacity);//向图中加入顶点
        ~CMap();
        bool addNode(Node* pNode);//重置顶点
        void resetNode();
        bool setValueToMatrixForDirecteGraph(int row,int col,int val = 1);    //为有向图设置邻接矩阵
        bool setValueToMatrixForUndirecteGraph(int row,int col,int val = 1);//为无向图设置邻接矩阵
        
        void printMatrix();//打印邻接矩阵
        
        void depthFirstTraverse(int nodeIndex);//深度优先遍历
        void breadthFirstTraverse(int nodeIndex);// 广度优先遍历
       
    private:
        bool getValueFromMatrix(int row,int ol,int &val);//从矩阵中获取权值
        void breadthFirtTraverseImp(vector<int> preVec);//广度优先遍历实现函数
        
    private:
        int m_iCapacity;        //图中最多可以容纳的顶点数
        int m_iNodeCount;        //已经添加的顶点个数
        Node *m_pNodeArray;    //存放顶点数组
        int *m_pMatrix;        //存放邻接矩阵
    };
    
    #endif


    查看全部
  • //Node.cpp
    
    #include "Node.h"
    
    Node::Node(char data)
    {
        m_cData = data;
        m_lsVisited = false;
    }


    查看全部
  • #ifndef NODE_H
    #define NODE_H
    
    class Node
    {
       public:
           Node(char data = 0);
           char m_cData;//节点数据
           bool m_blsVisited;//节点访问标志
    };
    #endif


    查看全部
  • 2. demo.cpp

    查看全部
  • 1. demo.cpp

    查看全部
  • 2. void CMap::breadthFirstTraverseImpl(vector<int> preVec)

    查看全部
  • 2. void CMap::breadthFirstTraverseImpl(vector<int> preVec)

    查看全部
  • 1. CMap::breadthFirstTraverse(int nodeIndex)

    查看全部
  • 4. NODE_CPP

    查看全部
  • 3. NODE_H

    查看全部
  • 2. CMAP_H

    查看全部
  • 1. CMAP_H

    查看全部
  • 数据结构
    查看全部
    0 采集 收起 来源:课程概述

    2019-12-26

  • 1、图的存储结构

    查看全部

举报

0/150
提交
取消
课程须知
本课程是数据结构初级课程 1、熟练掌握C++语言基础语法
老师告诉你能学到什么?
1、图的基本概念 2、图的存储方式 3、图的遍历算法 4、图的最小生成树算法 5、图的实际应用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!