#pragma once
#ifndef INSTANCE_H
#define INSTANCE_H

#include <vector>
#include <stdexcept>
#include <iostream>
#include <chrono>
#include <algorithm>
#include <tuple>
#include <unordered_set>
#include <iterator>
#include <numeric>
#include <fstream>
#include <string>

#include "Utils.h"

struct Instance {
    int numNodes;
    int numCustomers;
    int vehicleCapacity;
    std::vector<int> demand;
    std::vector<std::vector<float>> distanceMatrix;
    std::vector<std::vector<float>> nodePositions;
    std::vector<std::vector<int>> adj;

    // Constructors
    Instance(int numCustomers, int vehicleCapacity, const std::vector<int>& demand, const std::vector<std::vector<float>>& nodePositions);

    Instance(std::string pathToInstance, bool isRoundingInteger = true);


    // Other necessary properties and methods of the Instance object
};

#endif // INSTANCE_H