计算一个有向图中出度为零和入度为零的顶点个数
计算一个有向图中出度为零和入度为零的顶点个数
为了方便查找
有向图采用邻接矩阵实现
统计出度为0的顶点个数
即扫描邻接矩阵的某一行,记得加个tag进行标记大哥
void MGraph::Out0()
{int count=0; //累加器for(int i=0;i<vertexNum;i++){int tag=0;for(int j=0;j<vertexNum;j++){if(edge[i][j]!=0){tag=1;break;}}if(tag==0){count++;}}cout<<"一共有"<<count<<"个出度为0的顶点"<<endl;
}
统计入度为0的顶点个数
void MGraph::In0()
{int count=0; //累加器for(int i=0;i<vertexNum;i++){int tag=0;for(int j=0;j<vertexNum;j++){if(edge[j][i]!=0) //对列进行操作 i,j的顺序反过来{tag=1;break;}}if(tag==0){count++;}}cout<<"一共有"<<count<<"个入度为0的顶点"<<endl;
}
有向图的邻接矩阵实现
有向图类
const int MaxSize=7; //最大顶点个数class MGraph
{private:/* data */char vertex[MaxSize]; //数组-用于存放图中顶点int edge[MaxSize][MaxSize]; //数组-用于存放图中的边int vertexNum,edgeNum; //图的顶点数和边数int visited[MaxSize]={0};
public:MGraph(char a[],int n,int e); //构造函数void showVertex();void showEdge();~MGraph(); //虚构函数void DFTraverse(int v); //深度优先遍历图void BFTraverse(int v); //广度优先遍历图void init(); //遍历后重新初始化visitedvoid In0(); //入度为0的顶点个数void Out0(); //出度为0的顶点个数
};
MGraph.h
/*
*有向图的C++实现
*邻接矩阵存储法
*/
#include<iostream>
using namespace std;const int MaxSize=7; //最大顶点个数class MGraph
{private:/* data */char vertex[MaxSize]; //数组-用于存放图中顶点int edge[MaxSize][MaxSize]; //数组-用于存放图中的边int vertexNum,edgeNum; //图的顶点数和边数int visited[MaxSize]={0};
public:MGraph(char a[],int n,int e); //构造函数void showVertex();void showEdge();~MGraph(); //虚构函数void DFTraverse(int v); //深度优先遍历图void BFTraverse(int v); //广度优先遍历图void init(); //遍历后重新初始化visitedvoid In0(); //入度为0的顶点个数void Out0(); //出度为0的顶点个数
};
MGraph.cpp
#include"MGraph.h"MGraph::MGraph(char a[],int n,int e)
{int i,j,k;vertexNum=n;edgeNum=e;for(i=0;i<vertexNum;i++){vertex[i]=a[i]; //存储顶点}for(i=0;i<vertexNum;i++){for(j=0;j<vertexNum;j++){edge[i][j]=0; //初始化邻接矩阵}}for(k=0;k<edgeNum;k++){cout<<"请输入有临边关系的两个点的代号:";cin>>i>>j;edge[i][j]=1;}}MGraph::~MGraph()
{cout<<"析构基于邻接矩阵的图"<<endl;
}void MGraph::DFTraverse(int v)
{cout<<vertex[v]<<" ";visited[v]=1;for(int j=0;j<vertexNum;j++){if(edge[v][j]==1 && visited[j]==0){DFTraverse(j);}}
}void MGraph::BFTraverse(int v)
{cout<<"广度优先遍历:";int w,j,Q[MaxSize]; //顺序队列,有点取巧int front=-1,rear=-1;cout<<vertex[v]<<" ";visited[v]=1;Q[++rear]=v;while(front!=rear){//当队列非空时为循环条件w=Q[++front];for(j=0;j<vertexNum;j++){if(edge[w][j]==1 && visited[j]==0){cout<<vertex[j]<<" ";visited[j]=1;Q[++rear]=j;}}}
}void MGraph::init()
{cout<<"归零visited数组"<<endl;//每次遍历结束后重新初始化visited数组for(int i=0;i<MaxSize;i++){this->visited[i]=0;}// for(int i=0;i<MaxSize;i++)// {// cout<<visited[i]<<endl;// }
}void MGraph::showVertex()
{cout<<"图的顶点编号为:";for(int i=0;i<vertexNum;i++){cout<<vertex[i]<<" ";}cout<<endl;
}void MGraph::showEdge()
{cout<<"邻接矩阵:"<<endl;for(int i=0;i<vertexNum;i++){for(int j=0;j<vertexNum;j++){cout<<edge[i][j]<<" ";if(j==vertexNum-1){cout<<endl;}}}
}void MGraph::In0()
{int count=0; //累加器for(int i=0;i<vertexNum;i++){int tag=0;for(int j=0;j<vertexNum;j++){if(edge[j][i]!=0){tag=1;break;}}if(tag==0){count++;}}cout<<"一共有"<<count<<"个入度为0的顶点"<<endl;
}void MGraph::Out0()
{int count=0; //累加器for(int i=0;i<vertexNum;i++){int tag=0;for(int j=0;j<vertexNum;j++){if(edge[i][j]!=0){tag=1;break;}}if(tag==0){count++;}}cout<<"一共有"<<count<<"个出度为0的顶点"<<endl;
}
测试
main.cpp
#include"MGraph.h"//第三题
int main()
{cout<<"基于邻接矩阵的有向图"<<endl;//常规版本char data[]={'A','B','C','D','E'};MGraph m1(data,5,4);m1.showVertex();m1.showEdge();m1.init();cout<<"深度优先遍历:";m1.DFTraverse(0);cout<<endl;m1.init();m1.BFTraverse(0);cout<<endl;m1.In0();m1.Out0();system("pause");return 0;
}
计算一个有向图中出度为零和入度为零的顶点个数相关推荐
- 一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为
一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为( ) A.O(n) ...
- Java黑皮书课后题第7章:*7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目
7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目 题目 题目描述 破题 代码 运行实例 题目 题目描述 7.22(计算一个字符串中大写字母的数 ...
- Java黑皮书课后题第6章:*6.20(计算一个字符串中字母的个数)编写一个方法,使用下面的方法体计算字符串中的字母个数。编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数
6.20(计算一个字符串中字母的个数)编写一个方法,使用下面的方法体计算字符串中的字母个数.编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数 题目 题目描述 破题 代码 运行示例 题目 ...
- 用递归求最大值PHP,php如何使用递归来计算一个目录中所有文件的大小(代码)...
本篇文章给大家带来的内容是关于php如何使用递归来计算一个目录中所有文件的大小 (代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.sudo find /private/etc - ...
- python统计列表中元素个数_python中计算一个列表中连续相同的元素个数方法
python中计算一个列表中连续相同的元素个数方法 最简单的例子: a = [1,1,1,1,2,2,2,3,3,1,1,1,3] # 问:计算a中最多有几个连续的1 很明显,答案是4 如果用代码实现 ...
- python 计算一个字符串中所有数字的和
# 计算一个字符串中所有数字的和def numsum(s):sum = 0 #定义变量,准备记录数字的和for i in range(len(s)): #遍历字符串if s[i] >= '0' ...
- 第七章第二十二题(计算一个字符串中大写字母的数目)(Calculates the number of uppercase letters in a string)
第七章第二十二题(计算一个字符串中大写字母的数目)(Calculates the number of uppercase letters in a string) *7.22(计算一个字符串中大写字母 ...
- pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动计数个数(rolling count)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额计数个数
pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动计数个数(rolling count).例如,计算某公司的多个店铺每N天(5天)的滚动销售额计数个数 目录
- 计算一个list中数据的平均数、中位数和众数【python实现】
一个数列的平均数的定义为,所有数值求和再除以数列长度 中位数定义为,将一个数列排序后位于中间的数值(数列长度为奇数时,取正中间的数,长度为偶数时,去中间的两个数的平均) 众数定义为,在一个数列中,出现 ...
最新文章
- bmp和png读取速率和处理速率比较
- 微软向Linux社区开放60000多项专利:对开源微软是认真的
- 耗时3年,集齐102位中国摄影师,央视这部纪录片BBC也无法超越......
- 简述oracle数据库特殊状态,【OracleDB】 01 概述和基本操作
- canvas 绘制贪吃蛇游戏
- 【Jsp】第一课 Jsp网络编程的介绍与入门学习
- 学生计算机 在线使用,中学生计算机基础教程
- 联合分布、条件分布、边缘分布还有贝叶斯公式
- 波特率与频率的换算公式?_变压器损耗计算公式
- java修改桌面背景_用Java更换Windows桌面壁纸
- Ch6 深度前馈神经网络
- java选择,智力,数量,推理
- 2016程序员你该爆发洪荒之力了!八招教你成功
- Day01 每日英语
- HTML5CSS3基础:HTML的图片、音频、视频(3)
- E575: viminfo: 无效的启动字符 位于
- 洪金宝坦言婚姻全靠“忍”。网友:好男人啊
- ios13 无法传参_iOS13.1 正式版来了,加入了降频功能
- c# 发送邮件保存服务器,c#-使用SmtpClient时如何保存电子邮件而不是发送电子邮件?...
- android 图片上动态添加文字,摘抄 android图片中添加文字水印