离散数学之图的矩阵表示及基本运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;in;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; jn; j++)

ﻩif(x->ele[i][j])deg++;

ﻩreturn deg;

}

int Operators::deg_in(M *x, int i)

{

ﻩintdeg=0;

ﻩfor(int j=0;jn; j++)

if(x->ele[j][i]) deg++;

ﻩreturn deg;

void Operators::MatrixMultiple(M *a, M *b, M*temp)

{

ﻩinti,j,k;

for(i=0;in;i++)

ﻩﻩfor(j=0;jn;j++)

ﻩﻩﻩfor(k=0;kn;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)

相关文档
最新文档