用C++判断无向图和完全有向图的代码
时间: 2023-10-30 07:21:39 浏览: 147
判断无向图:
```c
#include <stdio.h>
#define MAXN 100
int G[MAXN][MAXN];
int n, m; // n表示顶点数,m表示边数
int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < m; ++i) {
int x, y;
scanf("%d%d", &x, &y);
G[x][y] = G[y][x] = 1; // 无向图,x和y之间有边,邻接矩阵中G[x][y]和G[y][x]都为1
}
int flag = 1; // 假设是无向图
for (int i = 1; i <= n; ++i) {
for (int j = i + 1; j <= n; ++j) {
if (G[i][j] != G[j][i]) { // 有一对顶点之间的边不对称
flag = 0; // 不是无向图
break;
}
}
if (!flag) break;
}
if (flag)
printf("This is an undirected graph.\n");
else
printf("This is not an undirected graph.\n");
return 0;
}
```
判断完全有向图:
```c
#include <stdio.h>
#define MAXN 100
int G[MAXN][MAXN];
int n, m; // n表示顶点数,m表示边数
int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < m; ++i) {
int x, y;
scanf("%d%d", &x, &y);
G[x][y] = 1; // 完全有向图,从x到y有一条边,邻接矩阵中G[x][y]为1
}
int flag = 1; // 假设是完全有向图
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (i != j && !G[i][j]) { // 有一对顶点之间没有边
flag = 0; // 不是完全有向图
break;
}
}
if (!flag) break;
}
if (flag)
printf("This is a complete directed graph.\n");
else
printf("This is not a complete directed graph.\n");
return 0;
}
```
阅读全文