permutation in c++ with backtracking

#include <iostream>
#include <vector>

using namespace std;

void backtrack(vector<int>& nums, vector<bool>& used, vector<int>& current, vector<vector<int>>& result) {
    if (current.size() == nums.size()) {
        result.push_back(current);
        return;
    }

    for (int i = 0; i < nums.size(); ++i) {
        if (used[i]) continue;

        used[i] = true;
        current.push_back(nums[i]);

        backtrack(nums, used, current, result);

        used[i] = false;
        current.pop_back();
    }
}

vector<vector<int>> permute(vector<int>& nums) {
    vector<vector<int>> result;
    vector<bool> used(nums.size(), false);
    vector<int> current;

    backtrack(nums, used, current, result);

    return result;
}

int main() {
    vector<int> nums = {1, 2, 3}; // Replace with your input array
    vector<vector<int>> result = permute(nums);

    cout << "Permutations:" << endl;
    for (const auto& perm : result) {
        cout << "[";
        for (int i = 0; i < perm.size(); ++i) {
            cout << perm[i];
            if (i < perm.size() - 1) cout << ", ";
        }
        cout << "]" << endl;
    }

    return 0;
}