Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <queue>
- #include <algorithm>
- using namespace std;
- typedef vector<vector<int> > graph;
- vector<int> BFS (graph& g) {
- vector<int> ret;//en verdad devolverÄ‚Å el pair.second del que me dÄ‚Å
- queue<pair<int,vector<int> > > Q;
- pair<int,vector<int> > aux, aux2;
- aux.first = 0;
- aux.second.push_back(0);
- Q.push(aux);
- int n = g.size()-1;// -> vertice final
- while (not Q.empty()) {
- aux = Q.front();
- Q.pop();
- for (int i = 0; i < g[aux.first].size(); ++i) {
- aux2 = aux;
- int v = g[aux.first][i];
- aux2.second.push_back(v);
- if (v == n) return aux2.second;
- else {
- aux2.first = v;
- Q.push(aux2);
- }
- }
- }
- return ret;
- }
- int main () {
- int n;
- while (cin >> n) {
- graph g (n);
- int m;
- cin >> m;
- while (m > 0) {
- // Llegeixo arestes. Recordem que el graf es dirigit
- int u,v;
- cin >> u >> v;
- g[u].push_back(v);
- --m;
- }
- for (int i = 0; i < g.size(); ++i) {
- sort(g[i].begin(),g[i].end());
- }
- vector<int> cami = BFS(g);
- cout << cami[0];
- for (int i = 1; i < cami.size(); ++i) cout << " " << cami[i];
- cout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement