离散数学之图的矩阵表示及基本运算
- 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 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: "< { for(j=0;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) { int deg=0; for(int j=0; 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;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 for(j=0;j b->ele[i][j]=temp->ele[i][j]; } void Operators::MatrixAdd(M *a, M *b) { int i,j; for(i=0;i for(j=0;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;i for(j=0;j if(Ma->ele[i][j]) Ma->ele[i][j]=1;