Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "todo.h"
- void ApilarLista(TGrafo *g, TLista *visit,TPila *P,TLista *L);
- void DFS(TGrafo *g,TElemento verticeIni);
- void EncolarLista(TLista *visit,TCola *C,TLista *L);
- void BFS(TGrafo *g,TElemento verticeIni);
- void DFSRecursivo(TGrafo *g,TPila *porvisitar,TLista *visitados);
- int main(){
- TGrafo G;
- grafo_init(&G);
- grafo_insertV(&G,'a');
- grafo_insertV(&G,'b');
- grafo_insertV(&G,'c');
- grafo_insertV(&G,'d');
- grafo_insertV(&G,'e');
- grafo_insertV(&G,'f');
- grafo_insertV(&G,'g');
- grafo_insertA(&G,'a','d');
- grafo_insertA(&G,'a','c');
- grafo_insertA(&G,'a','b');
- grafo_insertA(&G,'a','e');
- grafo_insertA(&G,'f','d');
- grafo_insertA(&G,'f','b');
- grafo_insertA(&G,'g','e');
- grafo_insertA(&G,'g','c');
- grafo_insertA(&G,'d','b');
- grafo_print(&G);
- BFS(&G,'a');
- DFS(&G,'a');
- return 0;
- }
- void BFS(TGrafo *g,TElemento verticeIni){
- //Colas
- TCola porvisitar;
- TLista visitados;
- C_init(&porvisitar);
- Lista_Crear(&visitados);
- TVertice *rec=g->ini;
- TElemento crtVert;
- //Buscamos el vértice
- C_enqueue(&porvisitar,verticeIni);
- while(!C_isEmpty(&porvisitar)){
- crtVert=C_dequeue(&porvisitar);
- Lista_Insertar(&visitados,crtVert);
- rec=g->ini;
- while (rec && rec->info!=crtVert)
- rec=rec->sig;
- EncolarLista(&visitados,&porvisitar,&rec->lstAdyacentes);
- }
- Lista_Imprimir(visitados);
- }
- void EncolarLista(TLista *visit,TCola *C,TLista *L){
- TNodo *crtnode=L->inicio;
- while (crtnode){
- if (!Lista_EstaEnLista(*visit,crtnode->elem)){
- C_enqueue(C,crtnode->elem);
- Lista_Insertar(visit,crtnode->elem);
- }
- crtnode=crtnode->sig;
- }
- }
- void DFS(TGrafo *g,TElemento verticeIni){
- //Pilas
- TPila porvisitar;
- TLista visitados;
- Stack_Create(&porvisitar);
- Lista_Crear(&visitados);
- Stack_Push(&porvisitar,verticeIni);
- DFSRecursivo(g,&porvisitar,&visitados);
- Lista_Imprimir(visitados);
- }
- void DFSRecursivo(TGrafo *g,TPila *porvisitar,TLista *visitados){
- TVertice *rec=g->ini;
- TElemento crtVert;
- int i=0;
- while(!Stack_IsEmpty(*porvisitar)){
- crtVert=Stack_Top(*porvisitar);
- Lista_Insertar(visitados,crtVert);
- rec=g->ini;
- while (rec && rec->info!=crtVert)
- rec=rec->sig;
- ApilarLista(g,visitados,porvisitar,&rec->lstAdyacentes);
- Stack_Pop(porvisitar);
- }
- }
- void ApilarLista(TGrafo *g, TLista *visit,TPila *P,TLista *L){
- TNodo *crtnode=L->inicio;
- while (crtnode){
- if (!Lista_EstaEnLista(*visit,crtnode->elem)){
- Stack_Push(P,crtnode->elem);
- Lista_Insertar(visit,crtnode->elem);
- DFSRecursivo(g,P,visit);
- }
- crtnode=crtnode->sig;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment