离散数学之图的矩阵表示及基本运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离散数学之图的矩阵表示及基本运算
————————————————————————————————作者:————————————————————————————————日期:
实验四图的矩阵表示及基本运算
实验目的
学习图在计算机中的矩阵表示,并能利用课堂所学知识进行出度和入度的计算。
实验内容与要求
根据输入的整数对,输出一个图形的邻接矩阵。并求出各结点的出度和入度。实验准备
图可以用多种方式来表示,其中邻接矩阵是一种较简单的方式。复习关于邻接矩阵的描述。明确一下内容:
1.如何使用邻接矩阵表示图。
2.利用图的邻接矩阵求结点的出度和入度的方法。
#include
int** g(int n)
{
ﻩint**a,i, j;
ﻩa= new int* [n];//分配指针数组
for(i=0; i<n; i++)
ﻩﻩa[i] = new int[n];//分配每个指针所指向的数组
ﻩfor(i=0;i for(j=0; j return a; } struct M { ﻩintn; intisOrient; int **ele; }; class Operators { public: void CreateMatrix(M *x); ﻩvoid CreateMatrix2(M *x,int n, int isOrient); void Input(M *x); ﻩvoid Show(M *x); ﻩint deg_out(M *a,inti); ﻩint deg_in(M *a,inti); ﻩvoid Maccessibility(M*a, M*Ma); void MatrixMultiple(M*a, M*b,M *m); voidMatrixAdd(M*a,M*b); }; voidOperators::CreateMatrix2(M *x, intn, int isOrient) { x->n=n; ﻩx->isOrient=isOrient; ﻩx->ele=g(x->n); } void Operators::CreateMatrix(M *x) { ﻩint n, isOrient; ﻩcout<<"Matrix's n="; ﻩcin>>n; cout<<"Is the graph oriented?1=yes, 0=no:"; ﻩcin>>isOrient; ﻩCreateMatrix2(x, n,isOrient); } void Operators::Input(M*x) { int i, j; ﻩwhile(1) ﻩ{ ﻩcout<<"Input the edge's start-point and end-point,-1 is tofinishinputing:"; cin>>i>>j; if(i==-1 ||j==-1)break; ﻩﻩx->ele[i][j]=1; ﻩif(!x->isOrient) x->ele[j][i]=1; } } void Operators::Show(M *x) { ﻩint i,j; ﻩif(x->isOrient) ﻩcout<<"The oriented matrix: "< else ﻩﻩcout<<"The no-orientedmatrix:"< ﻩfor(i=0;i { for(j=0;j<x->n;j++)cout<<x->ele[i][j]<<""; ﻩﻩcout< } } int Operators::deg_out(M*x,int i) { int deg=0; ﻩfor(int j=0; j ﻩif(x->ele[i][j])deg++; ﻩreturn deg; } int Operators::deg_in(M *x, int i) { ﻩintdeg=0; ﻩfor(int j=0;j if(x->ele[j][i]) deg++; ﻩreturn deg; } void Operators::MatrixMultiple(M *a, M *b, M*temp) { ﻩinti,j,k; for(i=0;i ﻩﻩfor(j=0;j ﻩﻩﻩfor(k=0;k ﻩﻩtemp->ele[i][j]+=a->ele[i][k]*b->ele[k][j]; for(i=0;i<a->n;i++) ﻩﻩfor(j=0;jn;j++) ﻩﻩb->ele[i][j]=temp->ele[i][j]; } voidOperators::MatrixAdd(M*a, M*b)