поэтому у меня возникли проблемы с решением проблемы для моего IT-экзамена.
Я решил это, и это частично сработало, но я мог найти решение только с использованием BFS, и я уверен, что для этого не требуются алгоритмы обхода графа, поскольку мы еще не сделали этого, но я не могу найти другое решение , Может ли кто-нибудь дать мне подсказку. Я опубликую код BFS, чтобы узнать, как я на самом деле это решил, а не то, как я думаю, что это должно было быть решено.
#include <stdio.h>
#include <stdlib.h>
char file[20][20];
int v[20], ns, n, comp, c[20];
int prim;
int ultim;
FILE *f;
int nr = 0, nl, nc;
void matrix() {
int i, j;
char c, n;
fscanf(f, "%d %d \n", &nl, &nc);
for (i = 1; i <= nl; i++) {
for (j = 1; j <= nc; j++) {
c = getc(f);
file[i][j] = c;
}
n = getc(f);
}
}
// citirea grafului din fisier text si construirea matricei de adiacenta
// afisarea pe ecran a matricei de adiacenta
void afisare() {
int i, j;
printf("Matricea : \n");
for (i = 1; i <= nl; i++)
{
for (j = 1; j <= nc; j++)
printf("%c", file[i][j]);
printf("\n");
}
}
// returnează primului nod nevizitat
int exista_nod_nevizitat(int v[20], int n) {
int i, j;
for (i = 1; i <= nl; i++)
if (v[i] == 0)
return i; // primul nod nevizitat
return 0; // nu mai exista noduri nevizitate
}
// parcurgerea în latime a unei componente conexe, plecând din nodul de start ns
void parcurgere_latime(char file[20][20], int nl, int ns) {
int i, j;
comp++;
v[ns] = 1;
prim = ultim = 1;
c[ultim] = ns;
while (prim <= ultim) {
for (i = 1; i <= nl; i++)
if (file[c[prim]][i] == 'L')
if (v[i] == 0)
{
ultim++;
c[ultim] = i;
v[i] = 1;
}
prim++;
}
}
// functia principala main()
int main() {
int set, nr;
f = fopen("in1.txt", "r");
fscanf(f, "%d \n", &set);
while (set != 0) {
matrix();
afisare();
while (exista_nod_nevizitat(v, n) != 0) {
ns = exista_nod_nevizitat(v, n);
parcurgere_latime(file, n, ns); // parcurg o alta componenta conexa
}
printf("Graful este alcătuit din ");
printf("%d", comp);
printf("componente conexe \n");
set--;
}
return 0;
}