求有向图中某顶点的入度 题目编号:635
创建一个有向图结构,求某顶点的入度。要求有向图的顶点个数,边的条数,顶点的数据,各条边都由键盘读入,顶点的数据类型为字符型。
输入描述
第一行输入有向图的顶点数和边的条数,以空格隔开
第二行输入每个顶点的数据,中间没有空格
第三行输入每条边,每条边的格式为i j,中间有空格,所有边占一行
第四行输入某个顶点的序号
输出描述
输出要求顶点的入度,占一行
输入样例
5 5
abcde
0 1 0 2 0 3 1 2 1 4
2
输出样例
2
#include<iostream>
using namespace std;
const int MaxSize = 20;
struct EdgeNode
{
int adjvex;
EdgeNode *next;
};
struct VertexNode
{
char vertex;
EdgeNode *firstEdge;
};
class AlGraph
{
public:
AlGraph();
~AlGraph();
int visited[MaxSize];
int rudu(int pp);
int EdgeNum,VertexNum;
private:
VertexNode adjlist[MaxSize];
};
AlGraph::AlGraph()
{
int x, y;
EdgeNode *s = NULL;
cin >> VertexNum >> EdgeNum;
for(int i =0;i < VertexNum; i++)
{
cin >> adjlist[i].vertex;
adjlist[i].firstEdge = NULL;
visited[i] = 0;
}
for(int j = 0; j< EdgeNum; j++)
{
cin >> x >> y;
s = new EdgeNode;
s->adjvex = y;
s->next = adjlist[x].firstEdge;
adjlist[x].firstEdge = s;
}
}
AlGraph::~AlGraph()
{
EdgeNode *p = NULL, *q = NULL;
for(int i = 0; i < VertexNum; i++)
{
p = q = adjlist[i].firstEdge;
while(p != NULL)
{
p = p->next;
delete q;
q = p;
}
}
}
int AlGraph::rudu(int pp)
{
int count=0;
for (int i = 0; i < VertexNum; i++)
{
visited[i] = 0;
}
EdgeNode *p = NULL;
for(int i = 0;i < VertexNum; i++)
{
p = adjlist[i].firstEdge;
while(p != NULL)
{
//cout<<"1ss";
if(p->adjvex==pp)
{
count++;
//cout<<p->adjvex;
}
p = p->next;
}
}
return count;
}
int main()
{
int i,j;
AlGraph A;
cin>>i;
j= A.rudu(i);
cout<<j;
return 0;
}