基础实验6-2.1-列出连通集-编程题
程序员文章站
2022-06-07 21:14:33
...
解题代码
#include<stdio.h>
#define MAXN 10
int A[MAXN][MAXN], B[MAXN], Q[MAXN];
int N, rear = -1, front = -1;
typedef enum { false, true } bool;
void Clear(void);
void DFS(int i);
void BFS(int i);
void Enqueue(int i);
int Dequeue(void);
bool IsEmpty(void);
int main()
{
int E, i, x, y;
scanf("%d %d", &N, &E);
for (i = 0; i < E; i++) {
scanf("%d %d", &x, &y);
A[x][y] = 1;
}
for (i = 0; i < N; i++) {
if (!B[i]) {
printf("{ ");
DFS(i);
printf("}\n");
}
}
Clear();
for (i = 0; i < N; i++) {
if (!B[i]) {
printf("{ ");
BFS(i);
printf("}\n");
}
}
}
void Clear(void) {
for (int i = 0; i < N; i++)
B[i] = 0;
}
void DFS(int V) {
B[V] = 1;
printf("%d ", V);
for(int i=0;i<N;i++)
if (!B[i]&&(A[V][i]||A[i][V])) DFS(i);
}
void BFS(int V) {
B[V] = 1;
printf("%d ", V);
Enqueue(V);
while (!IsEmpty()) {
V = Dequeue();
for(int i=0;i<N;i++)
if (!B[i]&&(A[V][i] || A[i][V])) {
B[i] = 1;
printf("%d ", i);
Enqueue(i);
}
}
}
void Enqueue(int i) {
Q[++rear] = i;
}
int Dequeue(void) {
return Q[++front];
}
bool IsEmpty(void) {
if (front == rear) return true;
else return false;
}
测试结果
问题整理
1.基础题。
2.以后尽量把迭代修改放在BFS/DFS里,打包放置。
上一篇: 二叉树的遍历-非递归方式
下一篇: 跟主板相关的故障五则
推荐阅读