求有向图中某顶点的出度 题目编号:632
设计有向图的结构,其中图的顶点为字符型,求该有向图中某顶点的出度。要求键盘输入图中顶点的个数,边的条数,顶点的信息,边的组成等。
输入描述
第一行输入有向图的顶点数和边的条数,以空格隔开
第二行输入每个顶点的数据,中间没有空格
第三行输入每条边,每条边的格式为i j,中间有空格,所有边占一行
第四行输入某个顶点的序号(注意序号从0开始)
输出描述
输出该顶点的出度,占一行
输入样例
5 5
abcde
0 1 0 2 0 3 1 2 1 4
0
输出样例
3
#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 chudu(int i);
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::chudu(int i)
{
int count=0;
for (int i = 0; i < VertexNum; i++)
{
visited[i] = 0;
}
EdgeNode *p = NULL;
//for(int i = 0;i < VertexNum; i++)
//{
//cout << adjlist[i].vertex << " ";
p = adjlist[i].firstEdge;
while(p != NULL)
{
count++;
p = p->next;
}
return count;
// cout << endl;
//}
}
int main()
{
int i,j;
AlGraph A;
cin>>i;
j= A.chudu(i);
cout<<j;
return 0;
}