问题描述
创建一个有向图结构,求某顶点的入度。要求有向图的顶点个数,边的条数,顶点的数据,各条边都由键盘读入,顶点的数据类型为字符型。
输入描述
第一行输入有向图的顶点数和边的条数,以空格隔开
第二行输入每个顶点的数据,中间没有空格
第三行输入每条边,每条边的格式为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;
}