Skip to content

Commit 5e87eeb

Browse files
author
Rafael Santos
committed
feat: resolutions created in 2020-09-17.
1 parent da34154 commit 5e87eeb

File tree

3 files changed

+126
-0
lines changed

3 files changed

+126
-0
lines changed

codes/graphs/bfs.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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+
}

codes/graphs/dfs.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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+
}

codes/graphs/dijkstra.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
}

0 commit comments

Comments
 (0)