计算一个有向图中出度为零和入度为零的顶点个数

为了方便查找

有向图采用邻接矩阵实现

统计出度为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;
}

计算一个有向图中出度为零和入度为零的顶点个数相关推荐

  1. 一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为

    一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为(       ) A.O(n)                                   ...

  2. Java黑皮书课后题第7章:*7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目

    7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目 题目 题目描述 破题 代码 运行实例 题目 题目描述 7.22(计算一个字符串中大写字母的数 ...

  3. Java黑皮书课后题第6章:*6.20(计算一个字符串中字母的个数)编写一个方法,使用下面的方法体计算字符串中的字母个数。编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数

    6.20(计算一个字符串中字母的个数)编写一个方法,使用下面的方法体计算字符串中的字母个数.编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数 题目 题目描述 破题 代码 运行示例 题目 ...

  4. 用递归求最大值PHP,php如何使用递归来计算一个目录中所有文件的大小(代码)...

    本篇文章给大家带来的内容是关于php如何使用递归来计算一个目录中所有文件的大小 (代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.sudo find /private/etc - ...

  5. python统计列表中元素个数_python中计算一个列表中连续相同的元素个数方法

    python中计算一个列表中连续相同的元素个数方法 最简单的例子: a = [1,1,1,1,2,2,2,3,3,1,1,1,3] # 问:计算a中最多有几个连续的1 很明显,答案是4 如果用代码实现 ...

  6. python 计算一个字符串中所有数字的和

    # 计算一个字符串中所有数字的和def numsum(s):sum = 0 #定义变量,准备记录数字的和for i in range(len(s)): #遍历字符串if s[i] >= '0' ...

  7. 第七章第二十二题(计算一个字符串中大写字母的数目)(Calculates the number of uppercase letters in a string)

    第七章第二十二题(计算一个字符串中大写字母的数目)(Calculates the number of uppercase letters in a string) *7.22(计算一个字符串中大写字母 ...

  8. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动计数个数(rolling count)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额计数个数

    pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动计数个数(rolling count).例如,计算某公司的多个店铺每N天(5天)的滚动销售额计数个数 目录

  9. 计算一个list中数据的平均数、中位数和众数【python实现】

    一个数列的平均数的定义为,所有数值求和再除以数列长度 中位数定义为,将一个数列排序后位于中间的数值(数列长度为奇数时,取正中间的数,长度为偶数时,去中间的两个数的平均) 众数定义为,在一个数列中,出现 ...

最新文章

  1. bmp和png读取速率和处理速率比较
  2. 微软向Linux社区开放60000多项专利:对开源微软是认真的
  3. 耗时3年,集齐102位中国摄影师,央视这部纪录片BBC也无法超越......
  4. 简述oracle数据库特殊状态,【OracleDB】 01 概述和基本操作
  5. canvas 绘制贪吃蛇游戏
  6. 【Jsp】第一课 Jsp网络编程的介绍与入门学习
  7. 学生计算机 在线使用,中学生计算机基础教程
  8. 联合分布、条件分布、边缘分布还有贝叶斯公式
  9. 波特率与频率的换算公式?_变压器损耗计算公式
  10. java修改桌面背景_用Java更换Windows桌面壁纸
  11. Ch6 深度前馈神经网络
  12. java选择,智力,数量,推理
  13. 2016程序员你该爆发洪荒之力了!八招教你成功
  14. Day01 每日英语
  15. HTML5CSS3基础:HTML的图片、音频、视频(3)
  16. E575: viminfo: 无效的启动字符 位于
  17. 洪金宝坦言婚姻全靠“忍”。网友:好男人啊
  18. ios13 无法传参_iOS13.1 正式版来了,加入了降频功能
  19. c# 发送邮件保存服务器,c#-使用SmtpClient时如何保存电子邮件而不是发送电子邮件?...
  20. android 图片上动态添加文字,摘抄 android图片中添加文字水印

热门文章

  1. PHP 对接美团大众点评团购券的开发步骤
  2. python自带静态web服务器搭建代码实现(一)
  3. 宝塔linux面板什么原理,宝塔Linux面板是什么
  4. 整理使用移动光猫拨号
  5. 利用IntelliJ IDEA与Maven开始你的Scala之旅
  6. 百度云盘资源搜索神器仅有400kb
  7. 关于ScrollView嵌套RecyclerView时RecyclerView不显示的问题
  8. java使用freemarker实现word下载
  9. cmd批处理剪切_Windows命令行bat/cmd脚本,文件批处理教程
  10. 使用进程池抓取猫眼数据