#pragma once
#include <iostream>
using namespace std;
template<class T>
class MatriGraphx
{
public:
MatriGraphx(size_t capacity = 20);
~MatriGraphx();
class Vertex
{
public:
Vertex(T v) { val = v; }
friend class MatriGraphx<T>;
private:
T val;
};
public:
void addVertex(T);
void addEdge(int start, int end);
void printMatrix();
private:
size_t m_size;
size_t m_capacity;
Vertex** m_vArray;
int** m_pMatrix;
};
template<class T>
inline MatriGraphx<T>::MatriGraphx(size_t c)
:m_size(0),m_capacity(c)
{
m_vArray = new Vertex* [c];
m_pMatrix = new int* [c];
for (size_t i = 0; i < c; i++)
{
m_pMatrix[i] = new int[c];
memset(m_pMatrix[i], 0, c * sizeof(int));
}
}
template<class T>
inline MatriGraphx<T>::~MatriGraphx()
{
delete[] m_vArray;
delete[] m_pMatrix;
}
template<class T>
inline void MatriGraphx<T>::addVertex(T item)
{
if (m_size == m_capacity)
throw "超出容量";
m_vArray[m_size++] = new Vertex(item);
}
template<class T>
inline void MatriGraphx<T>::addEdge(int start, int end)
{
m_pMatrix[start][end] = m_pMatrix[end][start] = 1;
}
template<class T>
inline void MatriGraphx<T>::printMatrix()
{
std::cout << "顶点个数为 " << m_size << " 个:" << std::endl;
for (size_t i = 0; i < m_size; i++)
{
cout << m_vArray[i]->val << " ";
}
cout << endl;
for (size_t i = 0; i < m_size; i++)
{
for (size_t j = 0; j < m_size; j++)
{
cout << m_pMatrix[i][j] << " ";
}
cout << endl;
}
}