#include <stdio.h> #include <string.h> using namespace std; #define MAX_N 100 int n; int mat[MAX_N][MAX_N]; bool visited[MAX_N]; void dfs(int current_node) { visited[current_node] = true; for (int i = 0; i < n; i++) if (mat[current_node][i] && !visited[i]) dfs(i); } void printLineBreak() { printf("+"); for (int j = 0; j < n * 2 - 1; j++) printf("-"); printf("+\n"); } int main() { int cases; scanf("%d\n", &cases); for (int cas = 1; cas <= cases; cas++) { scanf("%d\n", &n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) scanf("%d", &mat[i][j]); bool dominates[MAX_N][MAX_N]; memset(dominates, false, sizeof(dominates)); dominates[0][0] = true; for (int removed_node = 1; removed_node < n; removed_node++) { dominates[0][removed_node] = true; memset(visited, false, sizeof(visited)); visited[removed_node] = true; dfs(0); for (int i = 0; i < n; i++) if (!visited[i]) dominates[removed_node][i] = true; dominates[removed_node][removed_node] = true; } memset(visited, false, sizeof(visited)); dfs(0); printf("Case %d:\n", cas); printLineBreak(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf(dominates[i][j] && visited[j] ? "|Y" : "|N"); } printf("|\n"); printLineBreak(); } } return 0; }
Friday, April 24, 2015
UVa 11902 - Dominator
Subscribe to:
Post Comments (Atom)
Neat Code.
ReplyDelete