Professional Documents
Culture Documents
#Include #Include #Define Nrvarfuri 6
#Include #Include #Define Nrvarfuri 6
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
//grafuri
#include <iostream>//pt cout
#include <stdlib.h>
#define nrVarfuri 6
using namespace std;//pt scrierea prescurtata, fara std::cout, etc
typedef int info;
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
info matriceAdiacenta[nrVarfuri][nrVarfuri] = {
{0, 1, 0, 1, 0, 0},
{1, 0, 0, 0, 1, 0},
{0, 0, 0, 1, 0, 1},
{1, 0, 1, 0, 0, 1},
{0, 1, 0, 0, 0, 0},
{0, 0, 1, 1, 0, 0}
};
PVARF primulVarf;
primulVarf = grafDinMatriceAdiacenta(matriceAdiacenta, nrVarfuri);
cout << "Parcurgere in adancime" << endl;
parcurgereGrafInAdancime(primulVarf);
cout << endl;
cout << "Parcurgere in latime" << endl;
parcurgereGrafInLatime(primulVarf);
cout << endl;
stergeGraf(primulVarf); primulVarf = NULL;
cout << "Parcurgere in adancime" << endl;
parcurgereGrafInAdancime(primulVarf);
cout << endl;
cout << "Parcurgere in latime" << endl;
parcurgereGrafInLatime(primulVarf);
cout << endl;
system("PAUSE");//in stdlib
return 0;
}
PVARF grafDinMatriceAdiacenta(int matrice[nrVarfuri][nrVarfuri], int nr){
if(nr <= 0) return NULL;
PVARF primulVarf = NULL, temp;
for(int i = 0; i< nr; i++) primulVarf = inserareVarfNou(primulVarf, i+1);
temp = primulVarf;
for(int i = 0; i < nr; i++)
for(int j = 0; j < nr; j++)
if(matrice[i][j])
inserareArcNou(primulVarf, i+1, j+1, matrice[i][j]);
return primulVarf;
}
120:
121:
if(!primulVarf) return varfNou;
122:
123:
PVARF temp = primulVarf;
124:
while(temp->varfUrmator) temp = temp->varfUrmator;
125:
temp->varfUrmator = varfNou;
126:
return primulVarf;
127: }
128:
129: PVARF cautVarf(PVARF primulVarf, int informatie){
130:
while(primulVarf) if((primulVarf->informatie) != informatie) primulVarf =
primulVarf->varfUrmator ;
131:
else break;
132:
return primulVarf;
133: }
134:
135: void inserareArcNou(PVARF primulVarf, int sursa, int destinatie, int pondere){
136:
PVARF varfSursa = NULL, varfDestinatie = NULL, tempVarf = primulVarf,
ultimulVarf = primulVarf;
137:
138:
varfSursa = cautVarf(primulVarf, sursa);
139:
varfDestinatie = cautVarf(primulVarf, destinatie);
140:
141:
while(ultimulVarf->varfUrmator) ultimulVarf = ultimulVarf->varfUrmator;
142:
if(!varfSursa){
143:
primulVarf = inserareVarfNou(primulVarf, sursa);
144:
ultimulVarf = ultimulVarf->varfUrmator;
145:
varfSursa = ultimulVarf;
146:
}
147:
if(!varfDestinatie){
148:
primulVarf = inserareVarfNou(primulVarf, destinatie);
149:
ultimulVarf = ultimulVarf->varfUrmator;
150:
varfDestinatie = ultimulVarf;
151:
}
152:
153:
PARC tempArc, arcNou;
154:
tempArc = varfSursa->capListaArce;
155:
if(!tempArc){//dc nu gaseste legatura de la sursa la destinatie
156:
arcNou = new ARC;
157:
arcNou->arculUrmator = NULL;
158:
arcNou->varfDestinatie = varfDestinatie;
159:
varfSursa->capListaArce = arcNou;
160:
return;
161:
}
162:
while(tempArc->arculUrmator){
163:
if(tempArc->varfDestinatie->informatie != destinatie) tempArc = tempArc>arculUrmator;
164:
else break;
165:
}//iese pe elementul deja existent, sau pe ultimul, pe care treb sa il
testam
166:
if(tempArc->varfDestinatie->informatie != destinatie){//dc nu gaseste
legatura de la sursa la destinatie
167:
arcNou = new ARC;
168:
arcNou->arculUrmator = NULL;
169:
arcNou->varfDestinatie = varfDestinatie;
170:
tempArc->arculUrmator = arcNou;
171:
}
172: }
173:
174: PSTIVA push(PSTIVA varfStiva, PVARF varf){
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
PVARF varfPop;
PARC tempArc;
PSTIVA varfStiva = NULL;
varfStiva = push(varfStiva, primulVarf);
vizitareVarf(varfStiva->varf, vizitat);
cout << varfStiva->varf->informatie;
do{
varfStiva = pop(varfStiva, &varfPop);
varfCurent = varfPop;
tempArc = varfCurent->capListaArce;
while(tempArc){
if(!vizitat[tempArc->varfDestinatie->informatie-1]){
//cout << endl << varfCurent->informatie << "->" << tempArc>varfDestinatie->informatie << endl;
varfStiva = push(varfStiva, tempArc->varfDestinatie);
vizitareVarf(varfStiva->varf, vizitat);
cout << varfStiva->varf->informatie;
}
tempArc = tempArc->arculUrmator;
}
}while(varfStiva);
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
tempArc = tempArc->arculUrmator;
290:
}
291:
}while(coada.inceput);
292: }
293:
294: void stergeGraf(PVARF primulVarf){
295:
if(!primulVarf) return;
296:
stergeGraf(primulVarf->varfUrmator);
297:
PARC temp;
298:
while(primulVarf->capListaArce){
299:
temp = primulVarf->capListaArce;
300:
primulVarf->capListaArce = primulVarf->capListaArce->arculUrmator;
301:
delete temp;
302:
}
303:
delete primulVarf;
304: }
305: