有向图的邻接矩阵的平方运算的含义
有向图的邻接矩阵的平方运算的含义
这是《图论算法应用》第一章的一题作业,搞了现在,线性代数太差了。嘿嘿
先上代码:
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define MAXN 100
//有向图的邻接矩阵的乘法运算
using namespace std;
int Edge[MAXN][MAXN];
int newEdge[MAXN][MAXN];
int main(int argc, char *argv[]) {int num ; //测试案例个数int i,j , k,q; //循环变量int vertexNum ; //有向图顶点的个数int arcNum ; //有向图边的个数 int start,end ; //起点和终点scanf("%d",&num);while(num--){scanf("%d%d",&vertexNum,&arcNum);if(vertexNum == 0 && arcNum ==0 ){break;}memset(Edge,0,sizeof(Edge));memset(newEdge,0,sizeof(newEdge));for(i=0 ;i < arcNum;i++){scanf("%d%d",&start,&end);Edge[start - 1][end - 1] = 1; //注意序号减一}for(i =0 ;i < vertexNum;i++){for(j = 0; j < vertexNum;j++){if(j == 0){printf("%d",Edge[i][j]);}else{printf(" %d",Edge[i][j]);}}printf("\n");}printf("\n\n");for(i = 0 ;i< vertexNum ;i++){ int tempArray [100];memset(tempArray,0,sizeof(tempArray));for(k = 0 ; k < vertexNum;k++){tempArray[k] = Edge[i][k];}for(q = 0 ;q < vertexNum;q ++ ){int sum = 0 ;for(j = 0 ;j < vertexNum ;j ++){sum = sum+Edge[j][q]*tempArray[j];}newEdge[i][q] = sum ;}}for(i =0 ;i < vertexNum;i++){for(j = 0; j < vertexNum;j++){if(j == 0){printf("%d",newEdge[i][j]);}else{printf(" %d",newEdge[i][j]);}}printf("\n");}}return 0;
}
题目要求写出有向图邻接矩阵的平方后的矩阵,然后说出其中的含义,写代码将近一个多小时,想含义将近半个点儿,期间求助于百度,360无果,线性代数资料太少,差点看教学视频了,我也是醉了的人啊。
在平方后我们依然得到了一个二维矩阵,其中的每个元素值的含义是以有向图中节点的直接邻接点是否可达为准。
用图描述
图1 有向图
图2 有向图的邻接矩阵表示
图 3有向图的平方后的矩阵
就是以1节点的邻接点2为准,这个邻接点所有的邻接点3,也就是说图3中第一行第三个元素的值为1表示1节点可以通过它的邻接点2访问到3,同理第二行最后一个元素为1表示节点2可以通过3访问到4,,当然元素为0表示该节点不能间接到达,当元素值为1表示有一条路径可以到达,元素值为2的时候有两条路径可以到达。
这种邻接矩阵的平方相当于做一次广度优先搜索遍历,如果再将得到的邻接矩阵再次平方则表示通过二次间接方式测试节点间是否可达。也就是说从开始节点通过两个邻接点后是否可以到达第三个邻接点。
本次作业鉴定完毕。
有向图的邻接矩阵的平方运算的含义相关推荐
- python求输入数字的平方、如果平方运算后小于50则退出_Python练习题(三)
44.两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵 import numpy # pip install numpy 需要安装模块 ,支持大量的维度数组与矩阵运算 x = n ...
- python计算2的平方代码_Python练习实例46 | 求输入数字的平方,如果平方运算后小于 50 则退出。...
这个问题,其实有两种计算的思路,第一种就是需要对结果进行判断,无非就是两种结果,一种结果为真,一种结果为假,将这两种结果分别赋值给1和0,然后创建一个while循环即可. 小黄人.jpg 实现的方式大 ...
- 有向图的邻接矩阵和邻接表画法
本例子展示有向图画邻接表和邻接矩阵,反过来也是如此 大三时自学了了数据结构中的图,发现图中有邻接矩阵和邻接表,作为笔记记录下来 如下图所示,给了一个有向图,求邻接矩阵 怎么做呢? 第一步:和无向图类似 ...
- 邻接矩阵中啥时候写0和无穷_带权有向图的邻接矩阵中0和无穷大
信息举报 时间:2020-12-23 本页为您甄选多篇描写带权有向图的邻接矩阵中0和无穷大,带权有向图的邻接矩阵中0和无穷大精选,带权有向图的邻接矩阵中0和无穷大大全,有议论,叙事 ,想象等形式.文章 ...
- hashmap储存有向图_java-对后边缘进行运算以获取有向图中的循环数
我一直在编写代码,以在有向图中获得所有可能的周期. Here是一种跟踪后沿的实现,只要找到一个后沿,它就会返回true,即检测到一个循环.我将其扩展到以下内容: 计算一棵树中所有可能的后边缘,后边缘的 ...
- PYTHON输入数字的平方,如果平方运算后小于50则退出
TRUE = 1 FALSE = 0 def PF(a):return a * a b = 1 while b:num = int(input('输入一个数字:'))print('运算结果为:', P ...
- BZOJ4105 THUSC2015平方运算(线段树)
注意到模数被给出且非常小,做法肯定要依赖于一些与此相关的性质.找题解打表可以发现循环节长度的lcm不超过60. 考虑怎么用线段树维护循环.对线段树上每个点维护这段区间的循环节.在循环中的位置,如果未进 ...
- 输入一个包含若干数据的列表,先将列表中的数由小到大进行排序,然后将值为负数的元素进行平方运算
s=[5,7,1,-3,6,-2] s.sort() print(s) for i in range(len(s)):if(s[i]<0):s[i]=s[i]*s[i]print(s[i])
- 有向图邻接矩阵c语言编程,邻接矩阵有向图(一)之 C语言详解
本章介绍邻接矩阵有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...
- C# 平方、开方、保留小数 运算
平方运算 private double m; private double n=Math.Pow(m,2.0); 开平方运算 System.Math.Sqrt(数字);平方根. double保留两位小 ...
最新文章
- 蓝桥杯国赛知识点汇总
- sqlite命令行查看数据显示列头、java访问sqlite、java命令指定classpath
- ustc小道消息20211217
- 3分钟把区块链的技术与应用彻底讲清楚
- ocid oracle,Oracle数据库基础:新手推荐
- [Deepin - Pycharm] PyQT5安装配置
- CSS水平垂直居中布局方案概述
- MyBatis学习总结(15)——定制Mybatis自动代码生成的maven插件
- Ubuntu 20.04安装python3.6版本后terminal终端无法打开
- collins词典第八版mdx_英语词典选择
- 编辑距离Edit distance
- java基础-(二)-第一个java程序
- 2013年11月16Aspx源码发布详情
- ds90ub934 i2c 配置_TI ds90ub954 芯片调试简单总结
- [bzoj2434][AC自动机][树状数组]阿狸的打字机
- 【java】我国最高山峰是珠穆朗玛峰,8848米。现在我有一张足够大的纸,它的厚度是0.01米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度。
- 移动设备上“精灵图”的制作适配
- 中国近现代史纲要重点整理
- linux 本组其他组权限,linux中地用户组和各种权限
- 2021 CMU-15445/645 Project #2 : Hash Index