Untitled

 avatar
unknown
plain_text
a year ago
1.7 kB
9
Indexable
class Solution {
public:
    vector<vector<int>> buildMatrix(int k, vector<vector<int>>& rowConditions,
                                    vector<vector<int>>& colConditions) {
        vector<pair<int, int>> pos(k + 1);
        vector<vector<int>> ans;
        for (int i = 0; i < k; ++i) {
            pos[i + 1] = pair{i, i};
        }

        int cnt = k + 1;
        bool invalid = true;
        while (invalid && cnt--) {
            invalid = false;
            for (auto& r : rowConditions) {
                int above = r[0];
                int below = r[1];
                if (pos[above].second > pos[below].second) {
                    invalid = true;
                    int tmp = pos[above].second;
                    pos[above] = pair{pos[above].first, pos[below].second};
                    pos[below] = pair{pos[below].first, tmp};
                }
            }
        }

        if (cnt == -1) return ans;

        cnt = k + 1;
        invalid = true;
        while (invalid && cnt--) {
            invalid = false;
            for (auto& c : colConditions) {
                int left = c[0];
                int right = c[1];
                if (pos[left].first > pos[right].first) {
                    invalid = true;
                    int tmp = pos[left].first;
                    pos[left] = pair{pos[right].first, pos[left].second};
                    pos[right] = pair{tmp, pos[right].second};
                }
            }
        }

        if (cnt == -1) return ans;

        ans.resize(k, vector<int>(k));
        for (int i = 1; i <= k; ++i) {
            ans[pos[i].second][pos[i].first] = i;
        }
        return ans;
    }
};
Editor is loading...
Leave a Comment