Skip to content

Commit b601d3b

Browse files
committed
dominator graph
1 parent b1da682 commit b601d3b

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

11902.cpp

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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

Comments
 (0)