summaryrefslogtreecommitdiff
path: root/cpp/BFS.cpp
blob: 911d7e6024db2ecfbbbf307eba269d1629030833 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#define BIANCO 0  //Non Visitato
#define NERO 1   //Visitato
#define GRIGIO //Non Finito
#define INF 999999
#include <vector>
#include <fstream>
#include <queue>
#define MAXN 9999
#define INDEF -1
#include <stack>
using namespace std;
int V=9;  //Nodi
int precedente[MAXN];  //Vettore su cui viene salvato il percorso per arrivare alla destinazione
struct nodo {
	vector <int> adj;
}no[MAXN];;
 
 int bfsVisit (int s)
 {
 		int dist[V];
	int colore[V];
	queue <int> q;
	
	for (int i=0;i<V;i++)
	{
		precedente[i]=-1;
		dist[i]=INF;
		colore[i]=BIANCO;
	}
	dist[s]=INF;
	colore[s]=NERO;
	q.push(s);
	while (!q.empty())
	{
		int a=q.front();
		q.pop();
		for (int i=0;i<no[a].adj.size();i++)
		{
			int b=no[a].adj[i];
			if (colore[b] == BIANCO)
			{
				q.push(b);
				colore[b]=NERO;
				precedente[b]=a;
				dist[b]=dist[a] +1;
			}
		}
	}
	/*
	stack <int> sta;
	int i=3; // arrivo
	sta.push(i);
	while (precedente[i]!=INDEF)
	{
		
	}
	*/ //Procedura iterativa per stampare il percorso fino al nodo sorgente
	
 }
 
 void stampaPercorso (int j)  //Procedura ricorsiva j=precedente[destinazione]
 {
 	if (precedente[j] != INDEF )
 	stampaPercorso(precedente[j]);
 	cout<<j;
 }
int main(int argc, char** argv) {
	
	

	return 0;
}