Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let d = [
- [1, 0, 0, 0, 0, 0, 0, 1],
- [0, 1, 0, 0, 0, 0, 0, 1],
- [0, 0, 1, 0, 0, 0, 0, 0],
- [0, 1, 0, 1, 0, 1, 0, 0],
- [0, 0, 0, 0, 1, 0, 0, 0],
- [0, 0, 0, 0, 0, 1, 0, 1],
- [1, 0, 0, 0, 0, 0, 1, 0],
- [0, 0, 0, 1, 0, 0, 0, 1]
- ]
- let l = d[0].length
- let c = 0
- let s = 0
- // set count number
- d[l] = Array(l + 1).fill(0)
- for (let i = 0; i < l; i++) {
- d[i][l] = 0
- for (let j = 0; j < l; j++) {
- let n = d[i][j] == 0 ? 1 : 0
- d[i][l] += n
- d[l][j] += n
- d[l][l] += d[i][j] == 2 ? 1 : 0
- }
- }
- // console.log(d)
- console.log(+new Date())
- check(d)
- // console.log(c)
- // console.log(s)
- console.log(s/c)
- console.log(+new Date())
- function check(data, setRowIndex, setColumnIndex) {
- let d = data.map((e) => e.slice())
- let x = setRowIndex;
- let y = setColumnIndex;
- // set value for row & column
- if (x != undefined) {
- for (let i = 0; i < l; i++) {
- for (let j = 0; j < l; j++) {
- let m = d[i][j]
- d[i][j] = i == x && j == y ? 2 : i == x || j == y ? 1 : m
- let n = d[i][j] != m ? -1 : 0
- d[i][l] += n
- d[l][j] += n
- }
- }
- // set number of match
- d[l][l]++
- }
- // console.log(d)
- // get min value
- let minIndex = [0, 0]
- let minValue = l + 1
- for (let i = 0; i < l; i++) {
- if (d[i][l] != 0 && d[i][l] < d[l][i]) {
- if (d[i][l] < minValue) {
- minIndex = [i, l]
- minValue = d[i][l]
- }
- } else if (d[l][i] != 0 && d[l][i] < minValue) {
- minIndex = [l, i]
- minValue = d[l][i]
- }
- }
- // console.log(`minIndex = ${minIndex} | minValue = ${minValue}`)
- if (minValue == l + 1) {
- if (d[l][l] == l) {
- // console.log('---- result ----')
- // console.log(d)
- s += d[6][7] == 2 ? 1 : 0
- c++
- } else {
- console.log('cannot match')
- }
- return
- }
- // for loop to set value in min
- let row = minIndex[0]
- for (let i = 0; i < l; i++) {
- let row = minIndex[1] == l ? minIndex[0] : i
- let col = minIndex[1] == l ? i : minIndex[1]
- if (d[row][col] == 0) {
- check(d, row, col)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement