#include <iostream>
#include <string>
#define WUXIANG 0
using namespace std;
struct Graph
{
int vertexs;
int edges;
char* pVertex;
int** ppEdge;
};
Graph* CreateGraph();
void destroyGraph(Graph* g);
void initGraph(Graph* g);
int _getIdx(Graph* g, char c);
void show(Graph* g);
int main()
{
Graph* g = CreateGraph();
initGraph(g);
show(g);
destroyGraph(g);
system("pause");
return 0;
}
void initGraph(Graph* g)
{
cout << "请输入顶点的个数:\n";
cin >> g->vertexs;
cout << "请输入边条数:\n";
cin >> g->edges;
g->pVertex = new char[g->vertexs + 1];
g->ppEdge = new int* [g->vertexs];
for (int i = 0; i < g->vertexs; i++)
{
g->ppEdge[i] = new int[g->vertexs];
memset(g->ppEdge[i], 0, sizeof(int) * g->vertexs);
}
cout << "请输入顶点:\n";
cin >> g->pVertex;
char buff[5] = { 0 };
int srcIdx, dstIdx;
for (int i = 1; i <= g->edges; i++)
{
cout << "请输入第" << i << "条边(A->B):";
cin >> buff;
srcIdx = _getIdx(g, buff[0]);
dstIdx = _getIdx(g, buff[3]);
g->ppEdge[srcIdx][dstIdx] = 1;
#if WUXIANG
g->ppEdge[dstIdx][srcIdx] = 1;
#endif
}
}
Graph* CreateGraph()
{
Graph* graph = new Graph;
graph->edges = graph->vertexs = 0;
graph->ppEdge = nullptr;
graph->pVertex = nullptr;
return graph;
}
void destroyGraph(Graph* g)
{
delete[]g->ppEdge;
delete[]g->pVertex;
}
int _getIdx(Graph* g, char c)
{
for (int i = 0; i < g->vertexs; i++)
{
if (c == g->pVertex[i])
return i;
}
return -1;
}
void show(Graph* g)
{
for (int i = 0; i <= g->vertexs; i++)
{
for (int j = 0; j <= g->vertexs; j++)
{
if (i == 0 && j == 0)
cout << " ";
else if (i == 0)
{
cout << g->pVertex[j - 1] << " ";
}
else if (j == 0)
cout << g->pVertex[i - 1] << " ";
else
{
cout << g->ppEdge[i - 1][j - 1] << " ";
}
}
cout << endl;
}
}