#include<iostream> #include<string.h> #include<fstream> #include<iomanip> //是I/O流控制头文件,主要是对cin,cout之类的一些操纵运算子 using namespace std; #define MVNum 100 #define MaxInt 32767 void bky(); typedef struct { int v1; //边的起点 int v2; //边的终点 int w;//权值 }Edge;//边类型 typedef struct{ int arcs[MVNum][MVNum]; int vexnum,arcnum; }AMGraph; void CreatG(AMGraph &G,int n,int m,Edge bian[]) {//创建图G,采用邻接矩阵存储结构,图的顶点数为n,边数为m, //图的顶点为 0,1,....,n-1, bian[]存储的是图的边集信息 int a,b; G.vexnum=n; G.arcnum=m; //memset(G.arcs,0,sizeof(G.arcs)); for(int i=0;i<G.vexnum;i++) for(int j=0;j<G.vexnum;j++) G.arcs[i][j]=MaxInt;
时间: 2024-01-23 12:03:34 浏览: 106
C/C++头文件打圈
这段代码定义了一个邻接矩阵存储结构的图,并实现了一个创建图的函数。其中,`AMGraph`结构体定义了一个邻接矩阵图,包括顶点数`vexnum`、边数`arcnum`和邻接矩阵`arcs`。`Edge`结构体定义了边的信息,包括起点`v1`、终点`v2`和权值`w`。
`CreatG`函数的作用是根据输入的顶点数、边数和边的信息创建邻接矩阵图。具体实现过程如下:
```c++
void CreatG(AMGraph &G, int n, int m, Edge bian[]) {
int a, b;
G.vexnum = n;
G.arcnum = m;
// 将邻接矩阵所有元素初始化为最大值
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
G.arcs[i][j] = MaxInt;
}
}
// 根据边的信息更新邻接矩阵
for (int i = 0; i < G.arcnum; i++) {
a = bian[i].v1;
b = bian[i].v2;
G.arcs[a][b] = bian[i].w;
G.arcs[b][a] = bian[i].w;
}
}
```
该函数首先将邻接矩阵的所有元素初始化为最大值(表示两点之间没有边),然后根据输入的边的信息更新邻接矩阵。
注意,在使用该代码时,需要在程序中调用`bky()`函数,该函数用于读入输入数据并调用`CreatG`函数创建邻接矩阵图。完整代码如下:
```c++
#include<iostream>
#include<string.h>
#include<fstream>
#include<iomanip>
using namespace std;
#define MVNum 100
#define MaxInt 32767
void bky();
typedef struct {
int v1; // 边的起点
int v2; // 边的终点
int w; // 权值
} Edge;
typedef struct {
int arcs[MVNum][MVNum];
int vexnum, arcnum;
} AMGraph;
void CreatG(AMGraph &G, int n, int m, Edge bian[]) {
int a, b;
G.vexnum = n;
G.arcnum = m;
// 将邻接矩阵所有元素初始化为最大值
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
G.arcs[i][j] = MaxInt;
}
}
// 根据边的信息更新邻接矩阵
for (int i = 0; i < G.arcnum; i++) {
a = bian[i].v1;
b = bian[i].v2;
G.arcs[a][b] = bian[i].w;
G.arcs[b][a] = bian[i].w;
}
}
void bky() {
AMGraph g;
Edge bian[MVNum];
int n, m;
cout << "请输入顶点数和边数(空格隔开):";
cin >> n >> m;
cout << "请输入每条边的起点、终点和权值(空格隔开):" << endl;
for (int i = 0; i < m; i++) {
cin >> bian[i].v1 >> bian[i].v2 >> bian[i].w;
}
CreatG(g, n, m, bian);
cout << "创建的邻接矩阵如下:" << endl;
for (int i = 0; i < g.vexnum; i++) {
for (int j = 0; j < g.vexnum; j++) {
if (g.arcs[i][j] == MaxInt) {
cout << setw(5) << "∞";
} else {
cout << setw(5) << g.arcs[i][j];
}
}
cout << endl;
}
}
int main() {
bky();
return 0;
}
```
该程序首先调用`bky()`函数,读入输入数据并调用`CreatG`函数创建邻接矩阵图,最终输出邻接矩阵。输入格式为:
```
顶点数 边数
边的起点1 边的终点1 权值1
边的起点2 边的终点2 权值2
...
```
例如:
```
5 7
0 1 1
0 2 2
0 3 1
1 2 3
1 3 2
2 4 4
3 4 3
```
输出格式为按行输出邻接矩阵,每个元素之间以空格隔开,如果两个点之间没有边相连,则输出`∞`。
阅读全文