题目如下:
给定图数据文件(tinyG.txt)(文件内容见下图),计算得到图的邻接矩阵,并把邻接矩阵保存到文件(tinyG_matrix.txt)中。类名:GraphRepresentation。摘自《Algorithms, 4th Edition》P522。
我的解答如下:
代码:
#include <iostream>
#include <fstream>
using namespace std;
class GraphRepresentation
{
public:
GraphRepresentation(char const * inFileName);
~GraphRepresentation();
void output(char const * outFileName);//输出邻接矩阵
private:
int *vertex;
int **arc;
int vertexNum,arcNum;
};
int main(int argc, char const *argv[])
{
char const * inFileName= "tinyG.txt";
char const * outFileName = "tinyG_matrix.txt";
GraphRepresentation graph(inFileName);
graph.output(outFileName);
return 0;
}
GraphRepresentation::GraphRepresentation(char const * inFileName)
{
ifstream inFile(inFileName);
inFile >> vertexNum >> arcNum;
vertex =new int[vertexNum];
arc = new int*[vertexNum];
for (int i = 0; i < vertexNum; ++i)
{
arc[i] = new int[vertexNum];
}
int first[arcNum],second[arcNum];
int i = 0;
while(inFile>>first[i]>>second[i])
++i;
for (int i = 0; i < vertexNum; ++i) //初始化顶点数组
{
vertex[i] = i;
}
for (int i = 0; i < vertexNum; ++i) //初始化邻接矩阵
{
for (int j = 0; j < vertexNum; ++j)
{
arc[i][j] = 0;
}
}
for (int i = 0; i < arcNum; ++i) //生成邻接矩阵
{
arc[first[i]][second[i]] = 1;
arc[second[i]][first[i]] = 1;
}
inFile.close();
}
GraphRepresentation::~GraphRepresentation()
{
delete[] vertex;
for (int i = 0; i < arcNum; ++i)
{
delete[] arc[i];
}
delete[] arc;
}
void GraphRepresentation::output(char const * outFileName)
{
ofstream outFile(outFileName);
outFile<<"顶点:"<<endl;
for (int i = 0; i < vertexNum; ++i)
{
outFile<<vertex[i]<<" ";
}
outFile<<endl<<"邻接矩阵:"<<endl;
for (int i = 0; i < vertexNum; ++i)
{
for (int j = 0; j < vertexNum; ++j)
{
outFile<<arc[i][j]<<" ";
}
outFile<<endl;
}
outFile.close();
}
结果如下: