"Stdlib.h" "Stdio.h" "Conio.h": #Include #Include #Include Int Struct Int Int
"Stdlib.h" "Stdio.h" "Conio.h": #Include #Include #Include Int Struct Int Int
h" int matE [10][10]; struct listaMR{ int indiceColoana; int valoare; listaMR* next; }; struct listaListe{ int indiceLinie; listaMR* listaEl; listaListe* next; }; listaListe * creareElement(int i, int j, int valoare){ listaListe * nou = (listaListe *)malloc (sizeof(listaListe)); nou->indiceLinie=i; nou->listaEl = (listaMR *)malloc(sizeof(listaMR)); nou->next=NULL; nou->listaEl->indiceColoana=j; nou->listaEl->valoare=valoare; nou->listaEl->next=NULL; return nou; } listaListe* inserareLista(listaListe* &capLista, int i,int j, int val) { if (capLista==NULL){ capLista=creareElement(i,j,val); return capLista; } else//parcurgere listaListe pana cand indice linie == i { listaListe* mRara = capLista; while(mRara->next!=NULL && mRara->indiceLinie!=i) mRara=mRara->next; if(mRara->indiceLinie==i){ listaMR* b = mRara->listaEl; //inserare in sublista aferenta nodului cu indice linie = i for(;b->next;b=b->next); listaMR *nou = (listaMR*)malloc(sizeof(listaMR)); nou->indiceColoana=j; nou->next=NULL; nou->valoare=val; b->next = nou; }else{ //creare element -> inserare in lista principala (lista liste) mRara->next=creareElement(i,j,val); } } } void roy_warshall (int **matrice, int n)
{ int i,j,k; for (i=0;i<n;i++) for (j=0;j<n;j++) if (matrice [i][j] == 0) for (k=0;k<n;k++) { if ((matrice [i][k]==1)&& (matrice [k][j]==1)) matrice [i][j]=1; }
} void afiseazaMatrice (int **matrice , int n) { for (int i=0;i<n;i++) { for (int j=0;j<n;j++) printf ("%d ",matrice[i][j]); printf ("\n"); } } void BF (int **matrice, int n, int viz[10], int cCon[10], int &ncCon, int v) { viz[v]=1; int p=1, u=1; cCon[p]=v; while (p<=u) { v=cCon [p]; for (int j=0;j<n;j++) if(matrice[v][j]==1) { viz[j]=1; cCon[++u]=j; } p++; } ncCon=u; } void afiseazaVector(int vector[10], int n) { int i; for (int i=0;i<n;i++) printf ("%d ",vector[i]); } void main() { int viz[10], nc, cCon[10],ncCon; FILE* pFile = NULL; pFile = fopen("Sursa.txt", "r"); int** matrice = NULL; int nrLinii = 0; int nrColoane = 0; listaListe *mRara=NULL;
fscanf(pFile,"%d",&nrLinii); fscanf(pFile,"%d",&nrColoane); matrice =(int**)malloc(sizeof(int*)*nrLinii); for(int i = 0; i<nrLinii; i++) matrice[i] = (int*)malloc(sizeof(int)*nrColoane); int j = 0; int k = 0; while(!feof(pFile)) { if(k<nrColoane) { fscanf(pFile,"%d",&matrice[j][k]); k++; } else { k = 0; j++; } } for(j=0;j<nrLinii;j++) for(k=0;k<nrColoane;k++) if (matrice[j][k]!=0) inserareLista(mRara,j,k,matrice[j][k]); roy_warshall (matrice,nrLinii); afiseazaMatrice (matrice,nrLinii); getch(); for(int i=0;i<nrLinii;i++) if (viz[i] == 0) { BF (matrice, nrLinii, viz, cCon, ncCon, i); } afiseazaVector(cCon, ncCon); }