⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mygraph.cpp

📁 也是一个关于匹配方面的程序
💻 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 + -