Sunteți pe pagina 1din 13

//Se dă lista muchiilor unui graf neorientat. Să se verifice dacă graful este sau nu conex.

#include<stdio.h>

void citire(int *nv, int*nm, int a[20][20]) {

FILE *f;

int i, j;

int x, y;

f = fopen("lista.txt", "r");

if (f != NULL)

{ fscanf(f, "%d", &*nv);

fscanf(f, "%d", &*nm);

for (i = 1; i <= *nv; i++)

for (j = 1; j <= *nm; j++)

a[i][j] = 0;

for (i = 1; i <= *nm; i++) {

fscanf(f, "%d", &x);

fscanf(f, "%d", &y);

a[x][y] = a[y][x] = 1;

fclose(f);

else printf("fis nu exista");

void BFS( int x, int n, int a[20][20], int c[20], int viz [20])

int prim, ultim, nodcurent;


int i;

c[1] = x; //coada statica, adaugam x la coada, x nodul de start

prim = ultim = 1; //pt coada

while (prim <= ultim )

int nodcurent = c[prim];

prim++; //eliminam din coada, ignor ce am avut inainte

for ( i=1;i<=n;i++);

if (a[nodcurent][i]==1 && viz[i]==0)

ultim=ultim + 1;

c[ultim] = i;

viz[i] = 1;

int main ()

int n,m;

int a[20][20], c[20]={0}, viz[20]={0};

citire( &n,&m, a);

BFS(1, n, a, c, viz);

for(int i=1; i<=n; i++)

if (viz[i]==0)
{

printf("Graful nu este conex");

return 0;

printf("Graful este conex");

//Se dă lista muchiilor unui graf neorientat. Să se afișeze componentele conexe ale acestui graf.

#include<stdio.h>

void citire(int *nv, int*nm, int a[20][20]) {

FILE *f;

int i, j;

int x, y;

f = fopen("lista.txt", "r");

if (f != NULL)

{ fscanf(f, "%d", &*nv);

fscanf(f, "%d", &*nm);

for (i = 1; i <= *nv; i++)

for (j = 1; j <= *nv; j++)

a[i][j] = 0;

for (i = 1; i <= *nm; i++) {

fscanf(f, "%d", &x);

fscanf(f, "%d", &y);

a[x][y] = a[y][x] = 1;

fclose(f);
}

else printf("fis nu exista");

void BFS( int x, int n, int a[20][20], int c[20], int viz [20], int nrc)

int prim, ultim, nodcurent;

int i;

viz[x] = nrc;

c[1] = x; //coada statica, adaugam x la coada, x nodul de start

prim = ultim = 1; //pt coada

while (prim <= ultim )

int nodcurent = c[prim];

prim++; //eliminam din coada, ignor ce am avut inainte

for ( i=1;i<=n;i++);

if (a[nodcurent][i]==1 && viz[i]==0)

ultim=ultim + 1;

c[ultim] = i;

viz[i] = nrc; //in vectorul i vom retine din ce componenta conexa face parte

}
int main ()

int n,m;

int a[20][20], c[20]={0}, viz[20]={0}, nrc=0;

citire( &n,&m, a);

for(int i=1; i<=n; i++)

if (viz[i]==0)

nrc++;

BFS(i,n,a,c,viz, nrc);

printf("\nnrc componente conexe=%d", nrc);

printf("\n");

for(int i=1; i<=nrc; i++)

for( int j=1;j<=n;j++)

if (viz[j]==i)

printf ("%d ", j);

printf ("\n");

#include<stdio.h>

void citire(int *nv, int*nm, int a[20][20]) {


FILE *f;

int i, j;

int x, y;

f = fopen("lista.txt", "r");

if (f != NULL)

{ fscanf(f, "%d", &*nv);

fscanf(f, "%d", &*nm);

for (i = 1; i <= *nv; i++)

for (j = 1; j <= *nm; j++)

a[i][j] = 0;

for (i = 1; i <= *nm; i++) {

fscanf(f, "%d", &x);

fscanf(f, "%d", &y);

a[x][y] = a[y][x] = 1;

fclose(f);

else printf("fis nu exista");

void BFS( int x, int n, int a[20][20], int c[20], int viz [20])

int prim, ultim, nodcurent;

int i;

viz[x]=1;

printf("%d ", x);

c[1] = x; //coada statica, adaugam x la coada, x nodul de start

prim = ultim = 1; //pt coada


while (prim <= ultim )

int nodcurent = c[prim];

prim++; //eliminam din coada, ignor ce am avut inainte

for ( i=1;i<=n;i++);

if (a[nodcurent][i]==1 && viz[i]==0)

ultim=ultim + 1;

c[ultim] = i;

viz[i] = 1;

printf("%d ", i);

void DFS (int x, int n, int a[20][20], int viz[20])

printf("%d ", x);

viz[x]=1;

for(int i=1;i<=n;i++)

if (a[x][i]==1 && viz[i]==0)

DFS(i,n,a,viz);

int main ()
{

int n,m;

int a[20][20], c[20]={0}, viz[20]={0};

citire( &n,&m, a);

BFS(3, n, a, c, viz);

printf("\n");

for(int i=1;i<=1;i++)

viz[i]=0;

DFS(3,n,a,viz);

#include<stdio.h>

void citire(int *nv, int*nm, int a[20][20]) {

FILE *f;

int i, j;

int x, y;

f = fopen("lista.txt", "r");

if (f != NULL)

{ fscanf(f, "%d", &*nv);

fscanf(f, "%d", &*nm);

for (i = 1; i <= *nv; i++)

for (j = 1; j <= *nm; j++)

a[i][j] = 0;

for (i = 1; i <= *nm; i++) {

fscanf(f, "%d", &x);

fscanf(f, "%d", &y);

a[x][y] = a[y][x] = 1;
}

fclose(f);

else printf("fis nu exista");

void DFS (int x, int n, int a[20][20], int viz[20], int nrc)

viz[x]=nrc;

for(int i=1;i<=n;i++)

if (a[x][i]==1 && viz[i]==0)

DFS(i,n,a,viz,nrc);

int main ()

int n,m, nrc=0;

int a[20][20], c[20]={0}, viz[20]={0};

citire( &n,&m, a);

for(int i=1; i<=n; i++)

if (viz[i]==0)

{
nrc++;

DFS(i,n,a,viz, nrc);

printf("\nnrc componente conexe=%d", nrc);

printf("\n");

for(int i=1; i<=nrc; i++)

for( int j=1;j<=n;j++)

if (viz[j]==i)

printf ("%d ", j);

printf ("\n");

// Se dă lista muchiilor unui graf neorientat. Să se determine numărul de muchii care pot fi
eliminate din graf astfel încât numărul de componente conexe ale grafului să nu se
modifice.
#include<stdio.h>

void citire(int *nv, int*nm, int a[20][20]) {

FILE *f;

int i, j;

int x, y;

f = fopen("lista.txt", "r");

if (f != NULL)

{ fscanf(f, "%d", &*nv);

fscanf(f, "%d", &*nm);


for (i = 1; i <= *nv; i++)

for (j = 1; j <= *nm; j++)

a[i][j] = 0;

for (i = 1; i <= *nm; i++) {

fscanf(f, "%d", &x);

fscanf(f, "%d", &y);

a[x][y] = a[y][x] = 1;

fclose(f);

else printf("fis nu exista");

void DFS (int x, int n, int a[20][20], int viz[20], int nrc)

viz[x]=nrc;

for(int i=1;i<=n;i++)

if (a[x][i]==1 && viz[i]==0)

DFS(i,n,a,viz,nrc);

int main ()
{

int n,m, nrc=0;

int a[20][20], c[20]={0}, viz[20]={0};

citire( &n,&m, a);

for(int i=1; i<=n; i++)

if (viz[i]==0)

nrc++;

DFS(i,n,a,viz, nrc);

/*printf("\nnrc componente conexe=%d", nrc);

printf("\n");

for(int i=1; i<=nrc; i++)

for( int j=1;j<=n;j++)

if (viz[j]==i)

printf ("%d ", j);

printf ("\n");

*/

int f[20]={0}, s=0;

for(int i=1;i<=n;i++)

f[viz[i]]++;//prima componenta are 4, a doua 5 etc, cate noduri are fiecare componenta conexa

for(int i=1;i<=nrc;i++)//nr min=n-1

s=s+f[i]-1;

int x=m-s;

printf("%d ", x);//m nr de muchii, s nr min de muchii


}

S-ar putea să vă placă și