6-3有向图输出度0顶点(13点)题目:
在本问题中,要求实现输出有向图的所有图都为0的顶点的函数。
函数接口定义:
函数接口由voidprintv(mgraphg );
g是采用邻接矩阵作为存储器结构的有向图。
裁判测试程序样例:
#include stdio.h
#define MVNum 100 //最大顶点数typedef struct {
char vexs[MVNum]; //存储顶点的一维数组
int arcs[MVNum][MVNum]; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数}MGraph; voidprintv(mgraphg ); voidcreatmgraph(mgraphg; /绘图*/int main () )。
MGraph G;
creatmgraph(g );
printv(g );
返回0; }voidcreatmgraph(mgraphg ) {
int i,j,k;
scanf('%d%d )、G-vexnum和G-arcnum );
getchar (;
for(I=0; i G-vexnum; I )
scanf('%c ',G-vexs[i] );
for(I=0; i G-vexnum; I )
for(j=0; j G-vexnum; j )
G-arcs[i][j]=0;
for(k=0; k G-arcnum; k ) {
scanf('%d%d ),I,j );
G-arcs[i][j]=1;
() /你的代码嵌入在这里() /
输入样例:
例如有向图
第1行给出图的顶点数n和弧数e。 第2行给出n个文字,表示n个顶点的数据要素的值。 后面是e行,给出了每个圆弧的两个顶点编号。
4 5
ABCD
1 0
2 0
2 1
3 2
3 1
输出样例:
输出有两行,第一行是输出为0的顶点数,第二行按照输入顺序输出所有输出为0的顶点元素的值。 顶点的元素值是字符类型,输出格式为每个字符后面带有空格。 如果没有出度为0的顶点,则输出只有1行,个数为0。
1
a
思路:
首先,计算各节点的曝光度。 为了计算有向图的第I个节点的计算方法,计算邻接矩阵的第I行的节点数之和,用od表示。 另外,计数角度为0的节点的总个数sum。
步骤2,对输出进行分类。 如果曝光度是0的节点数,则输出0; 如果存在曝光度为0的节点,则输出与总个数对应的节点。
C语言代码:
voidprintv(mgraphg ) { int sum=0; //出度0的顶点个数//计算各节点的出度for (inti=0; iG.vexnum; I ) { int od=0; for(intj=0; jG.vexnum; j () if ) g.ARCS[I][j]==1) od; (if ) od==0) sum; (if ) sum==0) ) printf('0); }elseif(sum0) printf (% dn ),sum ); for(intI=0; iG.vexnum; I ) { int od=0; for(intj=0; jG.vexnum; j () if ) g.ARCS[I][j]==1) od; (if ) od==0) ) printf ),G.vexs[i]; } } }}