Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<mem.h>
- #include<conio.h>
- #include<iostream>
- #include<fstream>
- #define MAX 100
- #define TRUE 1
- #define FALSE 0
- int i,j;
- //numarul de noduri din graf
- int n;
- //matricea de adiacenta
- char vecin[MAX][MAX];
- // coada
- int coada[MAX];
- //indicele primului element din coada
- int first;
- //indicele ultimului element din coada
- int last;
- //pastreaza starea cozii
- int vida;
- /**
- *Initializarea cozii circulare
- */
- void initQueue(void){
- vida=TRUE;
- first=0;
- last=MAX;
- }
- /**
- *Intoarce pentru pozitia i, urmatoarea pozitie din din coada.
- */
- int next(int i){
- return(i+1)% MAX;
- }
- /**
- *Insereaza elementul a carui valoare este pastrata in variabila k in coada
- */
- void enQueue(int k){
- last=next(last);
- coada[last]=k;
- if (vida)
- vida=FALSE;
- }
- /**
- *Extrage un element din coada
- */
- int deQueue(){
- int k=coada[first];
- first=next(first);
- if (first==next(last))
- vida=TRUE;
- return k;
- }
- /**
- *Parcurge in latime graful pornind de la nodul de inceput k
- */
- void bfs(int k){
- int i;
- char vizitat[MAX];
- std::ofstream g("data.out");
- memset(vizitat,0,sizeof(vizitat));
- enQueue(k);
- g<<k;
- while(!vida){
- k=deQueue();
- for (i=0;i<n;i++)
- if ((vizitat[i]==0)&&(vecin[k][i]==1)){
- vizitat[i]=1;
- enQueue(i);
- g<<i;
- }
- }
- g.close();
- }
- void readInput(){
- int i,j;
- std::ifstream f("data.in");
- for(i=0;i<n;i++)
- for(j=0;j<n;j++)
- std::cout<<vecin[i][j];
- f.close();
- }
- int main(){
- readInput();
- initQueue();
- bfs(0);
- getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement