设计统计有向图中出度为零的顶点个数的算法。
一、邻接矩阵版本
邻接矩阵中一行全为零,才能确定该顶点出度为零
typedef struct{
int e_num; //边数
int v_num; //顶点个数
int links[SIZE][SIZE]; //邻接矩阵
char vexs[SIZE];
}Graph1;
//临接矩阵
int account1(Graph *ph){
int num = 0;
for(int i = 0; i < ph->v_num; i++){
int tag = 0; //标志位
for(int j = 0; j < ph->v_num; j++){
if(ph->links[i][j] != 0)
tag = 1;
}
if(tag == 0)
num++;
}
return num;
}
二、邻接表版本
邻接表中只需要确定顶点节点的指针为空,就可以确定带点的出度为零。
typedef struct edgeNode{ //边节点
char vex;
int value;
struct edgeNode *next;
}edgeNode;
typedef struct vexNode{ //顶点节点
char data;
edgeNode *firstNode;
}Vexs[SIZE];
typedef struct{ //图
int e_num; //边数
int v_num; //顶点个数
Vexs vex_arcs; //邻接表
}Graph;
//邻接表
int account2(Graph *ph){
int num;
for(int i = 0; i < ph->v_num; i++){
if(ph->vex_arcs[i].firstNode == NULL)
num++;
}
return num;
}