Está en la página 1de 4

1 #include<iostream>

2 #include<ctype.h>
3 using namespace std;
4
5 //se define el nodo
6 struct nodo
7 { int clave;
8 struct nodo *siguiente;
9 };
10
11 //se define una estructura del tipo pila
12 class Pila
13 {
14 private:
15 struct nodo *cabeza,*z;
16 public:
17 Pila();//funcion constructor
18 ~Pila();//funcion destructor
19 void meter(int m);//funcion meter o apilar
20 int sacar();//funcion sacar o desapilar
21 int vacia();
22 };
23
24 //se define la funcion constructor
25 Pila::Pila()
26 {
27 cabeza=new nodo;
28 z=new nodo;
29 cabeza->siguiente=z;
30 z->siguiente=z;
31 }
32
33 //funciòn destructor
34 Pila::~Pila()
35 {
36 struct nodo *t=cabeza;
37 while(t!=z)
38 {
39 cabeza=t;
40 t=t->siguiente;
41 delete cabeza;
42 }
43 }
44
45 //se define la funcion meter
46 void Pila::meter(int m)
47 {
48 struct nodo *t=new nodo;
49 t->clave=m;
50 t->siguiente=cabeza;
51 cabeza=t;
52 }
53
54 //se define la funcion sacar
55 int Pila::sacar()
56 {
57 int x;
58 struct nodo *t;
59 t=cabeza;
60 cabeza=t->siguiente;
61 x=t->clave;
62 delete t;
63 return x;
64 }
65
66 //se define la funcion vacia
67 int Pila::vacia()
68 {
69 if(cabeza->siguiente==z)
70 return 0;
71 else return 1;
72 }
73
74 /*declaracion de variables y funciones globales*/
75 int indice(char c);
76 char nombre(int n);
77 void buscar();
78 void visitar(int a);
79 void listaady();
80 void escribir(int val[]);
81 int novisto=0,id=0,val[50],v,a,h,k;
82 Pila pila; //declaraciòn de pila
83 struct nodo *t,*z,*ady[50];
84 int g,grd[50];
85 void grado(int grd[]);
86
87
88 //funcion indice
89 int indice(char c)
90 {
91 int m=0;
92 char k;
93 for(k='A';k<=c;k++)
94 m++;
95 return m;
96 }
97
98 //funcion nombre
99 char nombre(int n)
100 {
101 char q='A';
102 int i;
103 for(i=1;i<=n-1;i++)
104 q++;
105 return q;
106 }
107
108 //funcion lista de adyacencias
109 void listaady()
110 {
111 int i,j,x,y;
112 char v3,v4;
113 cout<<"Escribe el numero de vertices de la grafica: ";
114 cin>>v;
115 cout<<"Escribe el numero de aristas de la grafica: ";
116 cin>>a;
117 z=new nodo;
118 z->siguiente=z;
119 for(j=1;j<=v;j++)
120 ady[j]=z;
121 for(i=1;i<=a;i++)
122 {cout<<"escribe la arista"<<i<<"(con letras): ";
123 cin>>v3>>v4;
124 v3=toupper(v3);
125 v4=toupper(v4);
126 x=indice(v3);
127 y=indice(v4);
128 t=new nodo;
129 t->clave=x;
130 t->siguiente=ady[y];
131 ady[y]=t;
132 t=new nodo;
133 t->clave=y;
134 t->siguiente=ady[x];
135 ady[x]=t;
136 }
137 cout<<"\nL lista de adyacencia es:\n\n";
138 for(i=1;i<=v;i++)
139 {
140 cout<<"El vertice "<<nombre(i)<<" es adyacente a: ";
141 for(t=ady[i];t!=z;t=t->siguiente)
142 cout<<nombre(t->clave)<<"->";
143 cout<<"\n";
144 }
145 }
146
147 //funcion buscar
148 void buscar()
149 {
150 for(k=1;k<=v;k++)
151 val[k]=novisto;
152 for(k=1;k<=v;k++)
153 if(val[k]==novisto)
154 visitar(k);
155 }
156
157 //funcion visitar
158 void visitar(int a)
159 {
160 struct nodo *w;
161 pila.meter(a);
162
163 while(pila.vacia()==1)
164 {
165 a=pila.sacar();
166 val[a]=++id;
167 ++g=0;
168 for(w=ady[a];w!=z;w=w->siguiente)
169 {
170 grd[a]=++g;
171 if(val[w->clave]==novisto)
172 {
173 pila.meter(w->clave);
174 val[w->clave]=-1;
175 }
176 }
177 }
178 }
179
180
181
182 /*esta función escribe los valores de los vertices
183 deacuerdo a como fueron visitados*/
184 void escribir(int val[])
185 {
186 cout<<"\n";
187 for(h=1;h<=v;h++)
188 {
189 for(k=1;k<=v;k++)
190 {
191 if(h==val[k])
192 cout<<nombre(k);
193 }
194 }
195 cout<<"\n";
196 }
197
198 /*esta funcion muestra el grado de cada vertice*/
199 void grado(int grd[])
200 {
201 cout<<"\n";
202 for(h=1;h<=v;h++)
203 {
204 cout<<"\nel grado del vertice "<<nombre(h)<<" es:"<<grd[h]<<"\n";
205 }
206 cout<<"\n";
207
208 }
209
210 main()
211 {
212 cout<<"\t\tBusqueda de profundidad no recursiva\n\n";
213 listaady();
214 cout<<"\n\nEl orden en el que los vertices fueron encontrados es:\n";
215 buscar();
216 escribir(val);
217 grado(grd);
218 return 0;
219 }

También podría gustarte