【数据结构实验六】图

版权声明:本文为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;
}


运行结果:



猜你喜欢

转载自blog.csdn.net/King_HAW/article/details/74239518