Source: generators/VertexCoverGenerator.js

/**
 * Class for generating minimal vertex cover problem instances
 */
export class VertexCoverGenerator {
    /**
     * Class constructor
     * @param {object} params parameters of the generated instance
     */
    constructor (params) {
      this.params = params;
      this.params.size = +this.params.size;
      this.params.noEdges = +this.params.noEdges;
    }

    /**
     * Generate instance based on parameters
     * @return {String} instance of minimal vertex cover problem coded as String
     */
    generate() {
        var generatedInstance = this.params.size + "\n" + this.params.noEdges + "\n";
        var noEdges = 0;

        var array = new Array(this.params.size);
        for(var i = 0; i < this.params.size; i++)
        {
            array[i] = new Array(this.params.size).fill(0);
            array[i][i] = 0;
        }

        while(noEdges !== this.params.noEdges)
        {
            for(var i = 0; i < this.params.size; i ++)
            {
                for(var j = i + 1; j < this.params.size; j++)
                {
                    if(Math.random() < (1/this.params.size) && noEdges !== this.params.noEdges && !array[i][j]){
                      array[i][j] = 1;
                      array[j][i] = 1;
                      noEdges++;
                    }
                }
            }
        }


        for(var i = 0; i < this.params.size; i ++)
        {
            for(var j = 0; j < this.params.size; j++)
            {
                generatedInstance += array[i][j] + " ";
            }
            generatedInstance += "\n";
        }
        return generatedInstance;
    }
}