图的定义和输出的实现

头文件#include"adjacentmatrix.h"

#include<iostream>
using namespace std;
#define Max 0x3f3f3f3f
#define MaxVer 100
typedef char Ver;
typedef int Edge;
class Mgraph {
public:
	int  GetLocationOfVer(Mgraph *G, Ver va);
	void CreateMgraph(Mgraph *G);
	void PrintMgraph(Mgraph*G);
	//void Prim();
	//void kruskal();
private:
	Ver ver[MaxVer];
	Edge edge[MaxVer][MaxVer];
	int vernum;
	int edgenum;
	int w;                      //权重
};

#pragma once


头文件“GetLocationOfVer.h”

#include"adjacentmatrix.h"
int Mgraph::GetLocationOfVer(Mgraph *G, Ver va) {
	int i = 0;
	for (i; i < G->vernum; i++) {
		//if(strcmp(G->ver[i],va)==0)   错误原因
		if (G->ver[i] == va)
			return i;
	}
	return -1; //错误出口
}
#pragma once

头文件“CreateMgraph.h”

#include"adjacentmatrix.h"
void Mgraph::CreateMgraph(Mgraph *G) {
	cout << "请输入顶点数和边数:" << endl;
	cin >> G->vernum >> G->edgenum;
	int i, j, k;
	Ver  va, vb;
	cout << "请输入顶点集:" << endl;
	//输入顶点 建立顶点集
	for (i = 0; i < G->vernum; i++) {
		cin >> G->ver[i];
	}
	//初始化邻接矩阵
	for (i = 0; i < G->vernum; i++) {
		for (j = 0; j < G->vernum; j++) {
			if (i == j)G->edge[i][j] = 0;
			else  G->edge[i][j] = Max;
		}
	}
	cout << "请输入边信息及权值:" << endl;
	for (k = 0; k < (G->edgenum) / 2; k++) {
		cin >> va >> vb >> G->w;
		i = GetLocationOfVer(G, va);
		j = GetLocationOfVer(G, vb);
		G->edge[i][j] = G->w;
		G->edge[j][i] = G->w;
	}
}
#pragma once

touwenjian"PrintMgraph.h"

#include"adjacentmatrix.h"
void Mgraph::PrintMgraph(Mgraph *G) {
	cout << "邻接矩阵输出该图:" << endl;
	int i, j;
	for (i = 0; i < G->vernum; i++) {
		for (j = 0; j < G->vernum; j++) {

			cout.setf(ios_base::right, ios_base::adjustfield); //使用右对齐
			cout.width(10);
			cout.fill(' ');
			cout << G->edge[i][j];
			cout << "\t";
		}
		cout << endl;
	}
}
#pragma once

头文件中涉及到的了几个我想要记载的点:
1、typedef的作用是为数据类型起一个新名字。由3个部分组成,分别为关键字typedef, 原数据类型,新数据类型。
标准格式如下: typedef 原数据类型 新数据类型
2、 //if(strcmp(G->ver[i],va)==0) 错误原因
strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
3、由于C++中不能显示出正无穷。常采用0x3f3f3f3f来代表正无穷。这个十六进制的书转换成十进制是有十位数字的,因此,为了保证输出版面比较好看,我采取了对齐的控制方式。
cout.setf(ios_base::right, ios_base::adjustfield); //使用右对齐
cout.width(10); //总共位数
cout.fill(’ ');//输出的数字不够10为 用空格填充。


#include"adjacentmatrix.h"
int main() {
	cout << "***********欢迎建设通信网***********" << endl;
	Mgraph *a;
	a = (Mgraph*)new(Mgraph);
	cout.setf(ios_base::right, ios_base::adjustfield); //使用右对齐
	cout.width(12);
	cout.fill('*');
	a->CreateMgraph(a);
	a->PrintMgraph(a);
	system("pause");
	return 0;
}

这个程序,是我首个采用多个文件的形式,进行操作的。感觉很棒。哈哈哈,以后,多多努力鸭!

猜你喜欢

转载自blog.csdn.net/JIA010814/article/details/85316967