diff --git a/2392. Build a Matrix With Conditions b/2392. Build a Matrix With Conditions new file mode 100644 index 00000000..c753c6a7 --- /dev/null +++ b/2392. Build a Matrix With Conditions @@ -0,0 +1,64 @@ +class Solution { +public: + + bool toposort(vector> &adj, vector &tsort, vector &ind) + { + int V = ind.size(); + queue q; + + for(int i=0 ; i> buildMatrix(int k, vector>& rowConditions, vector>& colConditions) { + + vector> adj_row(k, vector ()); + vector> adj_col(k, vector ()); + + vector ind_row(k, 0); + vector ind_col(k, 0); + + for(auto &edge: rowConditions) + { + adj_row[edge[0]-1].push_back(edge[1]-1); + ind_row[edge[1]-1] += 1; + } + + for(auto &edge: colConditions) + { + adj_col[edge[0]-1].push_back(edge[1]-1); + ind_col[edge[1]-1] += 1; + } + + vector tsort_row; + vector tsort_col; + + bool notCycle_row = toposort(adj_row, tsort_row, ind_row); + bool notCycle_col = toposort(adj_col, tsort_col, ind_col); + + if(!notCycle_row || !notCycle_col) return {}; + vector> ans(k, vector (k, 0)); + + for(int row = 0 ; row < k ; row++) + { + int col = find(tsort_col.begin(), tsort_col.end(), tsort_row[row]) - tsort_col.begin(); + ans[row][col] = tsort_row[row]+1; + } + + return ans; + } +};