#include <stdio.h> #include <stdlib.h> #define N 100 typedef struct { int v[N]; int mat[N][N]; int vNum; int eNum; }Graph; 输入 输入数据有多组。 每组数据的第一行为两个正整数n和m,n表示顶点数(顶点从1到n编号),m表示边数。 接下来有m行,每行两个有正整数a和b (a和b不相等,1<=a,b<=n),表示顶点a到b有一条边。 但这些边可能有重复。 2<=n<=20, 0<=m<=n*(n-1)。 当m=n=0时,输入结束。 输出 每组输出n行n列,表示一个邻接矩阵。如果两条边有连接用1表示,否则用0表示。
时间: 2024-02-22 16:59:37 浏览: 83
栈和队列的基础上设计模拟停车场管理程序 停车场管理问题 #include<stdio.h> #include<stdlib.h> struct { char status; int num; int time; }a; /*命令的结构*/ typedef struct{ int num; int time; }Element; struct { Element *base; Element *top; in
以下是该题的C语言代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
typedef struct {
int v[N];
int mat[N][N];
int vNum;
int eNum;
}Graph;
void initGraph(Graph *g, int n) {
int i, j;
g->vNum = n;
g->eNum = 0;
memset(g->mat, 0, sizeof(g->mat));
for (i = 1; i <= n; i++) {
g->v[i] = i;
}
}
void addEdge(Graph *g, int u, int v) {
if (g->mat[u][v] == 0) {
g->mat[u][v] = 1;
g->mat[v][u] = 1;
g->eNum++;
}
}
void printGraph(Graph *g) {
int i, j;
for (i = 1; i <= g->vNum; i++) {
for (j = 1; j <= g->vNum; j++) {
printf("%d ", g->mat[i][j]);
}
printf("\n");
}
}
int main() {
int n, m, i, u, v;
Graph g;
while (scanf("%d%d", &n, &m) == 2 && n != 0 && m != 0) {
initGraph(&g, n);
for (i = 0; i < m; i++) {
scanf("%d%d", &u, &v);
addEdge(&g, u, v);
}
printGraph(&g);
}
return 0;
}
```
其中,initGraph()函数用于初始化图,addEdge()函数用于添加边,printGraph()函数用于打印邻接矩阵。在主函数中,通过循环读入多组数据并输出它们的邻接矩阵。
阅读全文