📄 mygraph.cpp
字号:
// Class automatically generated by Dev-C++ New Class wizard
#include "myGraph.h" // class's header file
// MyVertex
MyGraph::MyVertex::MyVertex()
{
k = 0;
num = -1;// 节点号是负数代表此节点不是图上的节点
}
// class destructor
MyGraph::MyVertex::~MyVertex()
{
// insert your code here
}
//MyEdge
MyGraph::MyEdge::MyEdge()
{
// insert your code here
isE = 0;
isVisited = 0;
cost = MAX;//无限大
}
// class destructor
MyGraph::MyEdge::~MyEdge()
{
// insert your code here
}
// class constructor
MyGraph::MyGraph()
{
n = 0;
Vertex = NULL;
Edge = NULL;
}
//copy constructor
MyGraph::MyGraph(MyGraph& g)
{
int i = 0;
Vertex = NULL;
Edge = NULL;
n = 0;
this->n = g.n;
Vertex = new MyVertex[n];
Edge = new MyEdge*[n];
for(int ed = 0; ed < n; ed++)
{
Edge[ed] = new MyEdge[n];
}
for(i = 0; i < n; i++)
{
Vertex[i].num = g.Vertex[i].num;
Vertex[i].k = g.Vertex[i].k;
for(int j = 0; j < n; j++)
{
Edge[i][j].isVisited = g.Edge[i][j].isVisited;
Edge[i][j].isE = g.Edge[i][j].isE;
Edge[i][j].cost = g.Edge[i][j].cost;
}
}
}
MyGraph& MyGraph::operator=(MyGraph& g)
{
int i = 0;
if(Vertex != NULL)
{
delete []Vertex;
Vertex = NULL;
}
if(Edge != NULL)
{
for(i = 0; i < n; i ++)
{
delete[]Edge[i];// insert your code here
Edge[i] = NULL;
}
delete []Edge;//??
Edge = NULL;
}
n = 0;
this->n = g.n;
Vertex = new MyVertex[n];
Edge = new MyEdge*[n];
for(int ed = 0; ed < n; ed++)
{
Edge[ed] = new MyEdge[n];
}
for(i = 0; i < n; i++)
{
Vertex[i].num = g.Vertex[i].num;
Vertex[i].k = g.Vertex[i].k;
for(int j = 0; j < n; j++)
{
Edge[i][j].isVisited = g.Edge[i][j].isVisited;
Edge[i][j].isE = g.Edge[i][j].isE;
Edge[i][j].cost = g.Edge[i][j].cost;//无限大
}
}
return g;
}
void MyGraph::readGraph()
{//??有点问题
int i = 0;
if(Vertex != NULL)
{//如果图非空那么读文件之前先释放从前的节点
delete []Vertex;
Vertex = NULL;
}
if(Edge != NULL)
{
for(i = 0; i < n; i ++)
{
delete[]Edge[i];// insert your code here
Edge[i] = NULL;
}
delete []Edge;//??
Edge = NULL;
}
n = 0;
//读取文件欠缺和合法性的检查
#if DEBUGMYGRAPH == 1//调试状态下,自动读取
ifstream infile("example2.txt");
#else
char filename[256];
cout<<"请输入文件名(包含扩展名的txt文件):"<<endl;
cin>>filename;
ifstream infile(filename);
#endif
if(!infile)
{
cout<<"文件不存在!请重新输入!";
return;
}
//读取并把图初始化
cout<<"开始读取文件..."<<endl;
infile>>n;//得到图的顶点数
Vertex = new MyVertex[n];
Edge = new MyEdge*[n];
for(int ed = 0; ed < n; ed++)
{
Edge[ed] = new MyEdge[n];
}
for(i = 0; i < n; i++)
{
Vertex[i].num = i;
for(int j = 0; j < n; j++)
{
Edge[i][j].isVisited = 0;
Edge[i][j].isE = 0;
Edge[i][j].cost = MAX;//无限大
if(i == j)
{
Edge[i][j].cost = 0;
}
}
}
//开始读取边的信息
int s,e,c;
s = 0;//起点
e = 0;//终点
c = 0;//代价
while(!infile.eof())
{
infile>>s;
infile>>e;
infile>>c;
Vertex[s].k ++;
Edge[s][e].isE = 1;
Edge[s][e].isVisited = 0;
Edge[s][e].cost = c;
}
cout<<"读取文件成功!"<<endl;
infile.close();
}
MyGraph::setGraph(int n)
{//设置图的节点数,重置图
int i = 0;
if(Vertex != NULL)
{//如果图非空那么读文件之前先释放从前的节点
delete []Vertex;
Vertex = NULL;
}
if(Edge != NULL)
{
for(i = 0; i < this->n; i ++)
{
delete[]Edge[i];// insert your code here
Edge[i] = NULL;
}
delete []Edge;
Edge = NULL;
}
this->n = n;
Vertex = new MyVertex[n];
Edge = new MyEdge*[n];
for(int ed = 0; ed < n; ed++)
{
Edge[ed] = new MyEdge[n];
}
for(i = 0; i < n; i++)
{
Vertex[i].num = -1;
for(int j = 0; j < n; j++)
{
Edge[i][j].isVisited = 0;
Edge[i][j].isE = 0;
Edge[i][j].cost = MAX;//无限大
}
}
}
void MyGraph::print()
{
cout<<"...开始打印图的相关信息..."<<endl;
cout<<"节点数:"<<n<<"个"<<endl;
cout<<"图的代价邻接矩阵如下:"<<endl;
int i = 0;
int j = 0;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
cout<<setw(10)<<Edge[i][j].cost<<',';
}
cout<<endl;
}
cout<<"...打印完毕..."<<endl;
}
void MyGraph::createGraphFile()
{//根据图输出相应的文件
ofstream outFile("outPut.txt");
outFile<<n;
outFile<<endl;
int i = 0;
int j = 0;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(Edge[i][j].isE == 1)
{
outFile<<i<<' '<<j<<' '<<Edge[i][j].cost<<endl;
}
}
}
}
void MyGraph::generateGraph(int n)
{//给定一个n生成一个随机的图
}
// class destructor
MyGraph::~MyGraph()
{
int i = 0;
if(Vertex != NULL)
{
delete []Vertex;
Vertex = NULL;
}
if(Edge != NULL)
{
for(i = 0; i < n; i ++)
{
delete[]Edge[i];// insert your code here
Edge[i] = NULL;
}
delete []Edge;
Edge = NULL;
}
n = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -