您的位置:首页 > 其它

计科《算法设计与分析》第四周作业——图的表示

2014-04-07 13:31 363 查看
题目如下:

给定图数据文件(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();
}
结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: