Friday, May 27, 2016

URI Online Judge Solution 1081 || DFSr - Depth Hierarchy

URI Online Judge | 1081

DFSr - Depth Hierarchy

By Neilor Tonin, URI  Brazil
Timelimit: 1
In graphs, the PathR function is well-known. It's called dfs or dfsr. It means a recursive deph-searching in nodes of a graph, using backtracking. The task here is, from an input graph, generate the hierarquie design of the searched nodes. To help you, is given the PathR procedure, listed above.

Input

The input file contains many test cases. The first line of the input file contains an integer N  that represents the quantity of test cases that follows. Each one of test cases contains, in the first line, two informations: (1 ≤ V ≤ 20) and E (1 ≤ E ≤ 20), that are respectively the amount of vertices and edges of the graph. Follow lines containing informations over all of the edges of this graph.

Output

For each test case, an output must be printed that represents a depth search for all nodes, with respect of the hierarquie of each of them. The character b means a blank space. See the follewing example:
bb0-2 pathR(G,2)
bbbb2-1 pathR(G,1)
bbbb2-4 pathR(G,4)
bbbbbb4-1

And so on...
Obs.: The program should print a blank line after each test case, even after the last test case.
Input SampleOutput Sample
2
12 9
0 1
1 5
5 6
0 4
4 2
2 3
7 8
1 7
10 11
11 8
0 1
1 2
3 4
4 3
5 6
6 8
7 9
9 10
Caso 1:
  0-1 pathR(G,1)
    1-5 pathR(G,5)
      5-6 pathR(G,6)
    1-7 pathR(G,7)
      7-8 pathR(G,8)
  0-4 pathR(G,4)
    4-2 pathR(G,2)
      2-3 pathR(G,3)

  10-11 pathR(G,11)

Caso 2:
  0-1 pathR(G,1)
    1-2 pathR(G,2)

  3-4 pathR(G,4)
    4-3

  5-6 pathR(G,6)
    6-8 pathR(G,8)

  7-9 pathR(G,9)
    9-10 pathR(G,10)

URI Online Judge Solution 1081 || DFSr - Depth Hierarchy solution in C++

#include <cstdio>
#include <cstring>
#include <iostream>
 
using namespace std;
 
#define MAX 20
#define sc(a) scanf("%d", &a);
#define sc2(a, b) scanf("%d%d", &a, &b);
 
bool disc[MAX];
int graph[MAX][MAX];
 
void clean(int v) {
    int i, j;
    for (i = 0; i < v; i++) {
        for (j = 0; j < v; j++)
            graph[i][j] = 0;
        disc[i] = false;
    }
}
 
bool dfs(int v, int n, int s) {
    int i;
    bool path = false;
 
    disc[v] = true;
 
    for (i = 0; i < n; i++) {
        if (graph[v][i] == 1) {
            path = true;
            if (!disc[i]) {
                cout << string(s, ' ');
                printf("%d-%d pathR(G,%d)\n", v, i, i);
                dfs(i, n, s + 2);
            } else {
                cout << string(s, ' ');
                printf("%d-%d\n", v, i);
            }
        }
    }
 
    return path;
}
 
void dfs_runner(int v) {
    int i, ind = 0;
 
    while (1) {
        if (dfs(ind, v, 2))
            puts("");
 
        ind = -1;
 
        for (i = 0; i < v; i++) {
            if (!disc[i]) {
                ind = i;
                break;
            }
        }
 
        if (ind == -1)
            break;
    }
}
 
int main(int argc, char const *argv[]) {
    int n, v, e, o, d, c = 1;
    sc(n);
 
    while(n--) {
        sc2(v, e);
        clean(v);
 
        while(e--) {
            sc2(o, d);
            graph[o][d] = 1;
        }
 
        printf("Caso %d:\n", c++);
        dfs_runner(v);
    }
 
    return 0;
}


See or download code from dropbox
See in URI 

No comments:
Write comments

To know more about the problem, give us your valuable commment. We'll try to help you. Thanks

All rights reserved ©2016 -URI ONLINE JUDGE SOLUTION | Developed by Maniruzzaman Akash

© 2016 URI ONLINE JUDGE SOLUTION. Developed by Maniruzzaman Akash | Distributed By Gooyaabi Templates
Powered by Blogger.