函数题:无向图统计边的个数
本题要求实现一个函数,统计无向图中边的个数。
### 函数接口定义:
c++
int countEdge(MGraph Graph);
Graph为采用邻接矩阵作为存储结构的有向图,函数countEdge返回Graph中边的个数。
### 裁判测试程序样例:
c++
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <stdlib.h>
#define INFINITY 65535 //∞设为65535
#define MAXVERTEXNUM 100 //最大顶点数设为100
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; //顶点数
int Ne; //边数
int G[MAXVERTEXNUM][MAXVERTEXNUM]; //邻接矩阵
char Data[MAXVERTEXNUM];
};
typedef PtrToGNode MGraph; //以邻接矩阵存储的图类型
MGraph BuildGraph()
{
MGraph Graph;
int i,j,k,weight;
char a,b;
Graph = (PtrToGNode)malloc(sizeof(struct GNode));
/*请输入顶点数和边数*/;
scanf("%d %d",&Graph->Nv,&Graph->Ne);
/*请输入顶点信息*/
for(i = 0;i < Graph->Nv; i++)
{
getchar(); //getchar()函数是输入一个字符,用此函数将scanf()未处理的量进行释放;
scanf("%c",&Graph->Data[i]); //输入顶点数据
}
for(i = 0;i < Graph->Nv; i++)
for(j = 0;j < Graph->Nv; j++)
Graph->G[i][j] = INFINITY; //初始化邻接矩阵
/*请输入边的信息(格式为:起点数据 终点数据 权重)*/
for(k = 0;k < Graph->Ne ; k++)
{
getchar();
scanf("%c %c %d",&a,&b,&weight);
for( i = 0; Graph->Data[i] != a;i++)
; //找到顶点a在邻接矩阵中的下标
for( j = 0; Graph->Data[j] != b;j++)
; //找到顶点b在邻接矩阵中的下标
Graph->G[i][j] = weight;
Graph->G[j][i] = weight;
}
return Graph;
}
/* 请在这里填写答案 */
int main()
{
MGraph Graph1;
int Esum;
/* 建立图的邻接矩阵 */
Graph1 = BuildGraph();
Esum = countEdge(Graph1);
printf("该图的边数为:%d",Esum);
return 0;
}

### 输入样例:
在这里给出一组输入。例如:
in
5 8
A B C D E
A B 8
A E 4
B C 7
B D 12
B E 5
C D 6
C E 11
D E 3
### 输出样例:
在这里给出相应的输出。例如:
out
该图的边数为:8
答案:若无答案欢迎评论
### 函数接口定义:
c++
int countEdge(MGraph Graph);
Graph为采用邻接矩阵作为存储结构的有向图,函数countEdge返回Graph中边的个数。
### 裁判测试程序样例:
c++
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <stdlib.h>
#define INFINITY 65535 //∞设为65535
#define MAXVERTEXNUM 100 //最大顶点数设为100
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; //顶点数
int Ne; //边数
int G[MAXVERTEXNUM][MAXVERTEXNUM]; //邻接矩阵
char Data[MAXVERTEXNUM];
};
typedef PtrToGNode MGraph; //以邻接矩阵存储的图类型
MGraph BuildGraph()
{
MGraph Graph;
int i,j,k,weight;
char a,b;
Graph = (PtrToGNode)malloc(sizeof(struct GNode));
/*请输入顶点数和边数*/;
scanf("%d %d",&Graph->Nv,&Graph->Ne);
/*请输入顶点信息*/
for(i = 0;i < Graph->Nv; i++)
{
getchar(); //getchar()函数是输入一个字符,用此函数将scanf()未处理的量进行释放;
scanf("%c",&Graph->Data[i]); //输入顶点数据
}
for(i = 0;i < Graph->Nv; i++)
for(j = 0;j < Graph->Nv; j++)
Graph->G[i][j] = INFINITY; //初始化邻接矩阵
/*请输入边的信息(格式为:起点数据 终点数据 权重)*/
for(k = 0;k < Graph->Ne ; k++)
{
getchar();
scanf("%c %c %d",&a,&b,&weight);
for( i = 0; Graph->Data[i] != a;i++)
; //找到顶点a在邻接矩阵中的下标
for( j = 0; Graph->Data[j] != b;j++)
; //找到顶点b在邻接矩阵中的下标
Graph->G[i][j] = weight;
Graph->G[j][i] = weight;
}
return Graph;
}
/* 请在这里填写答案 */
int main()
{
MGraph Graph1;
int Esum;
/* 建立图的邻接矩阵 */
Graph1 = BuildGraph();
Esum = countEdge(Graph1);
printf("该图的边数为:%d",Esum);
return 0;
}

### 输入样例:
在这里给出一组输入。例如:
in
5 8
A B C D E
A B 8
A E 4
B C 7
B D 12
B E 5
C D 6
C E 11
D E 3
### 输出样例:
在这里给出相应的输出。例如:
out
该图的边数为:8
答案:若无答案欢迎评论