1
+ #include < bits/stdc++.h>
2
+ using namespace std ;
3
+ typedef long long ll;
4
+ typedef vector<ll> vi;
5
+ typedef vector<vi> vvi;
6
+ const int mod = 1000000007 ;
7
+ const int sze = 110 ;
8
+ void printMat (vvi& a) {for (int i = 0 ; i < a.size (); ++i) {for (int j = 0 ; j < a[0 ].size (); ++j)cout << a[i][j] << " " ;} cout << " \n " ;}
9
+
10
+ int g[sze][sze];
11
+ char visited[sze]; // basically isDominator
12
+ int n;
13
+ char design[2 * sze];
14
+
15
+ void dfs (int src, int nodeToBeRemoved) {
16
+ if (src == nodeToBeRemoved) return ;
17
+ visited[src] = ' N' ;
18
+
19
+ for (int ngbr = 0 ; ngbr < n; ++ngbr) {
20
+ if (g[src][ngbr] == 1 && visited[ngbr] == ' Y' ) {
21
+ dfs (ngbr, nodeToBeRemoved);
22
+ }
23
+ }
24
+ }
25
+
26
+
27
+ void printDominators () {
28
+ char allConnected[sze];
29
+ memset (visited, ' Y' , sizeof visited);
30
+ dfs (0 , n + 1 );
31
+ for (int i = 0 ; i < n; ++i) {
32
+ allConnected[i] = visited[i];
33
+ // cout << allConnchroected << endl;
34
+ }
35
+
36
+ // all connected contains all the vertices that are reachable from zero
37
+
38
+ cout << design << " \n " ;
39
+
40
+ for (int curVer = 0 ; curVer < n; ++curVer) {
41
+ memset (visited, ' Y' , sizeof visited);
42
+ // all visited vertices will be set to N
43
+ dfs (0 , curVer);
44
+ putchar (' |' );
45
+ // for (int i = 0; i < n; ++i) {
46
+ // if (allConnected[i] == 'Y') visited[i] = 'N';
47
+ // }
48
+ for (int i = 0 ; i < n; ++i) {
49
+ // If all nodes are visited after removing curVer or curVer is disonncected from
50
+ // src
51
+ if (visited[i] == ' N' || allConnected[i] == ' Y' ){
52
+ putchar (' N' );
53
+ }
54
+ else putchar (' Y' );
55
+ putchar (' |' );
56
+ }
57
+ putchar (' \n ' );
58
+ cout << design << " \n " ;
59
+ }
60
+ }
61
+
62
+ int main () {
63
+ int t, caseno = 0 ;
64
+ cin >> t;
65
+ while (t--) {
66
+ scanf (" %d" , &n);
67
+ for (int i = 0 ; i < n; ++i) {
68
+ for (int j = 0 ; j < n; ++j) {
69
+ scanf (" %d" , &g[i][j]);
70
+ }
71
+ }
72
+ design[0 ] = design[2 * n] = ' +' ;
73
+ for (int i = 1 ; i < 2 * n; ++i) {
74
+ design[i] = ' -' ;
75
+ }
76
+ design[2 * n + 1 ] = ' \0 ' ;
77
+ printf (" Case %d:\n " , ++caseno);
78
+ printDominators ();
79
+ }
80
+ }
0 commit comments