欧拉图的判断C语言程序
时间: 2023-10-07 13:05:08 浏览: 179
判断欧拉图的C语言程序可以分为两种情况:
1. 判断无向图是否为欧拉图的程序:
```c
#include <stdio.h>
#define MAXN 100 // 最多顶点数
int G[MAXN][MAXN]; // 图的邻接矩阵
int degree[MAXN]; // 记录每个顶点的度数
int main()
{
int n, m;
scanf("%d%d", &n, &m);
// 初始化
for (int i = 0; i < n; i++)
{
degree[i] = 0;
for (int j = 0; j < n; j++)
G[i][j] = 0;
}
// 读入边
for (int i = 0; i < m; i++)
{
int u, v;
scanf("%d%d", &u, &v);
G[u][v] = G[v][u] = 1; // 无向图
degree[u]++;
degree[v]++;
}
// 判断是否为欧拉图
int flag = 1;
for (int i = 0; i < n; i++)
if (degree[i] % 2 != 0) // 存在奇度数顶点
{
flag = 0;
break;
}
if (flag)
printf("Yes\n"); // 是欧拉图
else
printf("No\n"); // 不是欧拉图
return 0;
}
```
2. 判断有向图是否为欧拉图的程序:
```c
#include <stdio.h>
#define MAXN 100 // 最多顶点数
int G[MAXN][MAXN]; // 图的邻接矩阵
int indegree[MAXN], outdegree[MAXN]; // 记录每个顶点的入度和出度
int main()
{
int n, m;
scanf("%d%d", &n, &m);
// 初始化
for (int i = 0; i < n; i++)
{
indegree[i] = outdegree[i] = 0;
for (int j = 0; j < n; j++)
G[i][j] = 0;
}
// 读入边
for (int i = 0; i < m; i++)
{
int u, v;
scanf("%d%d", &u, &v);
G[u][v] = 1; // 有向图
outdegree[u]++;
indegree[v]++;
}
// 判断是否为欧拉图
int flag = 1;
for (int i = 0; i < n; i++)
if (indegree[i] != outdegree[i]) // 存在入度不等于出度的顶点
{
flag = 0;
break;
}
if (flag)
printf("Yes\n"); // 是欧拉图
else
printf("No\n"); // 不是欧拉图
return 0;
}
```
在这两个程序中,我们首先通过邻接矩阵记录图的边信息,并计算每个顶点的度数、入度和出度。然后,分别判断无向图和有向图是否为欧拉图:无向图需要判断是否存在奇度数顶点,有向图需要判断是否存在入度不等于出度的顶点。如果满足条件,就输出“Yes”,否则输出“No”。
阅读全文