版权声明:本文为King_HAW原创文章,未经King_HAW允许不得转载。 https://blog.csdn.net/King_HAW/article/details/74239518
版权申明:
本实验的实验目的,实验内容,实验要求归东北大学所有,未经许可禁止转载。
实验六 图
实验目的:
掌握利用邻接矩阵存储图;掌握顶点和边的类型定义,实现邻接矩阵的输出。
实验内容:
1. 通过邻接矩阵存储图的边;通过一维数组存储图的顶点;
2. 声明无向图的类型;
3. 定义无向图的创建函数和输出函数;
4. 在主函数中声明创建一个无向图,实现邻接矩阵存储并输出。
源码:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
#define INFINITY 65535 //定义无穷
#define MAX_VERTEX_NUM 20 //定义最大节点数目
typedef int VRType;
typedef int InfoType;
typedef char VerTexType;
typedef struct ArcCell{
VRType adj; //权值数
InfoType *info; //弧指针
}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct Graph{
VerTexType vexs[MAX_VERTEX_NUM]; //顶点向量
AdjMatrix arcs; //邻接矩阵
int vexnum, arcnum; //图的当前顶点和弧的数目
}MGraph;
int LocateVex(MGraph G, VerTexType u){
int i;
for(i = 0; i < G.vexnum; i++)
{
if(G.vexs[i] == u)
break;
}
if(i >= G.vexnum)
{
return -1;
}
return i;
}
void CreateGraph(MGraph &G){
int weight;
int i = 0, j = 0, k = 0;
char vex_1, vex_2;
cout << "Input the number for vex and arc: ";
cin >> G.vexnum >> G.arcnum;
//cout << endl;
cout << "Input " << G.vexnum << " char for vertices: ";
for(i = 0; i < G.vexnum; i++){
cin >> G.vexs[i];
}
for(i = 0; i < G.vexnum; i++){
for(j = 0; j < G.vexnum; j++){
G.arcs[i][j].adj = INFINITY;
}
}
//cout << endl;
cout << "Input " << G.arcnum << " arcs(char char weight)" << endl;
for(k = 0; k < G.arcnum; k++){
cout << k << " : ";
cin >> vex_1;
cin >> vex_2;
cin >> weight;
i = LocateVex(G, vex_1);
j = LocateVex(G, vex_2);
G.arcs[i][j].adj = weight;
G.arcs[j][i].adj = weight;
//cout << endl;
}
}
void PrintGraph(MGraph G){
/*
int i, j;
for(i = 0; i < G.vexnum; i++)
{
for(j = 0; j < G.vexnum; j++)
{
printf("%d ", G.arcs[i][j]);
}
cout << endl;
}
*/
int i, j;
for(i = 0; i < G.vexnum; i++)
{
for(j = 0; j < G.vexnum; j++)
{
cout << setiosflags(ios_base::left) << setw(10) << G.arcs[i][j].adj;
}
cout << setiosflags(ios_base::left) << endl;
}
}
int main()
{
MGraph G;
CreateGraph(G);
cout << "The undirected graph is: " << endl;
PrintGraph(G);
return 0;
}
运行结果: