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

合集下载
  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

a[i] = new int[n];//分配每个指针所指向的数组

for(i=0; i

for(j=0; j

void MatrixMultiple(M *a, M *b, M *m); void MatrixAdd(M *a, M *b);

};

void Operators::CreateMatrix2(M *x, int n, 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 to finish inputing:";

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: "<

cout<<"The no-oriented matrix: "<n;i++)

{

for(j=0;jn;j++) cout<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)

{

int deg=0;

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

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

return deg;

}

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

{

int i,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;in;i++)

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

b->ele[i][j]=temp->ele[i][j];

}

void Operators::MatrixAdd(M *a, M *b)

{

int i,j;

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

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

a->ele[i][j]+=b->ele[i][j];

}

void Operators::Maccessibility(M *a, M *Ma) {

int i,j;

M p, temp;

CreateMatrix2(&p, a->n, a->isOrient); CreateMatrix2(&temp, a->n, a->isOrient);

MatrixAdd(&p, a);

MatrixAdd(Ma, a);

for(i=0; i<=a->n; i++)

{

MatrixMultiple(a, &p, &temp);

MatrixAdd(Ma, &p);

}

Show(&p);

Show(Ma);

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

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

if(Ma->ele[i][j]) Ma->ele[i][j]=1;

相关文档
最新文档