求有向图中某顶点的入度

问题描述

创建一个有向图结构,求某顶点的入度。要求有向图的顶点个数,边的条数,顶点的数据,各条边都由键盘读入,顶点的数据类型为字符型。
输入描述
第一行输入有向图的顶点数和边的条数,以空格隔开
第二行输入每个顶点的数据,中间没有空格
第三行输入每条边,每条边的格式为i j,中间有空格,所有边占一行
第四行输入某个顶点的序号
输出描述
输出要求顶点的出度,占一行
输入样例
5 5
abcde
0 1 0 2 0 3 1 2 1 4
2
输出样例
2

问题分析

有向图,所以在输入边的时候,只能将由x->y的边置为1(存在)

代码


#include<iostream>
using namespace std;
const int MaxSize = 20;
class Text
{
	public:
		Text(int v,int e);
		void Initialize();						
		void calculateInter(int v);				//计算入度 
		void CalculateOuter(int v);				//计算出度 
		int CountInter;							//入度数 
		int CountOuter; 						//出度数 
	private:
		char vertex[MaxSize];
		int edge[MaxSize][MaxSize];
		int vertexNum,edgeNum; 
		int visited[MaxSize];
};

Text::Text(int v, int e)
{
	CountInter = 0;
	CountOuter = 0;
	vertexNum = v,edgeNum = e;
	
	int i,j,x,y;
	for(i = 0; i < vertexNum; i++)
	{
		cin >> vertex[i];
		visited[i] =0;
	}
	
	for (x = 0; x < vertexNum; x++)				//边初始化为全没有 
	{
		for(y = 0; y < vertexNum; y++)
		{
			edge[x][y] = 0;
		}
	}
	
	for(j = 0; j < edgeNum; j++)				//因为是有向图,所以单向存在 
	{
		cin >> x >> y;
		edge[x][y] = 1;
	}
}

void Text::Initialize()
{
	for(int y = 0; y < vertexNum; y++)
	{
		visited[y] = 0;
	}
}
void Text::CalculateOuter(int v)
{
	for(int x = 0; x < vertexNum; x++)
	{
		if(edge[x][v] == 1)
		{
			CountOuter++;
		}
	}
}
void Text::calculateInter(int v)
{
	for(int y = 0; y < vertexNum; y++)
	{
		if(edge[v][y] == 1)
		{
			CountInter++;
		}
	}
}

int main()
{
	int v,e;
	cin >> v >> e;
	
	Text T(v,e);
	
	int n;
	cin >> n;
	
	T.CalculateOuter(n);
	cout << T.CountOuter << endl;				//输出某顶点的出度 
	return 0; 
}
发布了67 篇原创文章 · 获赞 3 · 访问量 1897

猜你喜欢

转载自blog.csdn.net/lfanyize/article/details/103402535
今日推荐