头文件#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;
}
这个程序,是我首个采用多个文件的形式,进行操作的。感觉很棒。哈哈哈,以后,多多努力鸭!