File tree Expand file tree Collapse file tree 3 files changed +126
-0
lines changed Expand file tree Collapse file tree 3 files changed +126
-0
lines changed Original file line number Diff line number Diff line change
1
+ #include < bits/stdc++.h>
2
+ using namespace std ;
3
+
4
+ #define 1001000 MAXV
5
+ #define pair <int ,int > pii;
6
+
7
+ int n,distancia[MAXV];
8
+ vector<pii> adj[MAXV];
9
+
10
+ void BFS (int fonte){
11
+ for (int i=0 ;i<MAXV;i++)// Marca os vértices como não visitados
12
+ distancia[i]=-1 ;
13
+
14
+ queue<int > fila;
15
+ fila.push (fonte);// Insere a fonte na fila
16
+ distancia[fonte]=0 ;// Iniciando a distancia da fonte como zero
17
+
18
+ int aux;
19
+ while (!fila.empty ()){
20
+ aux=fila.front ();// Pega o primeiro elemento da fila
21
+ fila.pop ();// Apaga o primeiro elemento da fila
22
+
23
+ for (auto viz:adj[aux]){
24
+ if (distancia[viz]!=-1 )// Se foi visitado, não adiciona na fila
25
+ continue ;
26
+
27
+ distancia[viz]=distancia[aux]+1 ;
28
+ fila.insert (viz);
29
+ }
30
+ }
31
+
32
+ }
Original file line number Diff line number Diff line change
1
+ #include < bits/stdc++.h>
2
+ using namespace std ;
3
+
4
+ #define V 100 // número máximo de vértices
5
+
6
+ int pai[V];
7
+ bool visitado[V]; // vetor que indica os vértices visitados
8
+ vector<int > adj[V]; // vetor de adjacências
9
+
10
+ void dfsUtil (int v)
11
+ {
12
+ visitado[v] = true ; // marca como visitado
13
+ // for (int av : adj[v]) também é possivel usar essa sintaxe
14
+ for (int a = 0 ; a < adj[v].size (); a++)
15
+ {
16
+ int av = adj[v][a];
17
+ if (!visitado[av])
18
+ {
19
+ cout << av << " " ; // imprime o vértice adjacente
20
+ dfsUtil (av); // chama dfs para o vértice adjacente não visitado
21
+ pai[av] = v; // salva o pai do vértice av
22
+ }
23
+ }
24
+ }
25
+
26
+ void dfs (int r, int v)
27
+ {
28
+ for (int i = 0 ; i < v; i++)
29
+ {
30
+ visitado[i] = false ;
31
+ pai[i] = -1 ;
32
+ }
33
+ cout << r << " " ;
34
+ dfsUtil (r);
35
+ cout << " \n " ;
36
+ }
37
+
38
+ int main ()
39
+ {
40
+ int v, a;
41
+ cin >> v >> a;
42
+ for (int i = 0 ; i < a; i++)
43
+ {
44
+ int x, y;
45
+ cin >> x >> y;
46
+ adj[x].push_back (y);
47
+ adj[y].push_back (x);
48
+ }
49
+ dfs (0 , v);
50
+ for (int i = 0 ; i < v; i++)
51
+ {
52
+ cout << " pai de " << i << " = " << pai[i] << " \n " ;
53
+ }
54
+ return 0 ;
55
+ }
Original file line number Diff line number Diff line change
1
+ #include " bits/stdc++.h"
2
+ using namespace std ;
3
+
4
+ #define MAXV 1001000
5
+ #define pii pair<int , int >
6
+
7
+ int n, distancia[MAXV];
8
+ vector<pii> adj[MAXV];
9
+
10
+ void dijkstra (int fonte)
11
+ {
12
+ for (int i = 0 ; i <= n; i++) // Marca como não visitado
13
+ distancia[i] = -1 ;
14
+
15
+ set<pii> fila;
16
+ fila.insert ({0 , fonte}); // Par de distância e vértice
17
+
18
+ pii aux;
19
+ while (!fila.empty ())
20
+ { // Enquanto ainda há nós para visitar
21
+ aux = *fila.begin ();
22
+ fila.erase (fila.begin ());
23
+
24
+ int vertice = aux.second ;
25
+ int distV = aux.first ;
26
+
27
+ if (distancia[vertice] != -1 ) // Se já foi visitado, passa para o próximo
28
+ continue ;
29
+
30
+ distancia[vertice] = distV;
31
+
32
+ for (auto vizinho : adj[vertice])
33
+ {
34
+ if (distancia[vizinho.first ] != -1 ) // Se já foi visitado, não adicionar no set
35
+ continue ;
36
+ fila.insert ({vizinho.second + distV, vizinho.first }); // d[vizinho]=d[vertice]+peso_da_aresta
37
+ }
38
+ }
39
+ }
You can’t perform that action at this time.
0 commit comments