मुझे उम्मीद है कि कोई मेरी मदद कर सकता है। मैं जावास्क्रिप्ट का उपयोग करके 2 डी मैट्रिक्स पर बीएफएस लागू करने की कोशिश कर रहा हूं।

फ़ंक्शन में 2D मैट्रिक्स ("लॉट") का एक इनपुट होता है जिसमें 1 या 0 की सेल होती है। ट्रैवर्सल को INT 9 के अपने गंतव्य की तलाश करनी चाहिए, और केवल INT 1 के माध्यम से पार करने में सक्षम होना चाहिए। यह सक्षम नहीं होना चाहिए 0s, या विज़िट की गई कोशिकाओं को पार करने के लिए जिन्हें मैं -1 के रूप में लेबल कर रहा हूं। एक बार जब यह अपने गंतव्य तक पहुंच जाता है, तो इसे गंतव्य को खोजने के लिए जितनी चालें चलीं, उतनी ही वापस करनी चाहिए। नीचे दिए गए उदाहरण में, यह 3 होगा क्योंकि 0,0 स्थिति से 9 तक पहुंचने में 3 चालें लगेंगी, उर्फ ​​​​शुरुआती बिंदु।

मुझे एक आउट-ऑफ-बाउंड त्रुटि मिलती रहती है, या केवल गलत उत्तर पूरी तरह से मिलता है। मैंने इस कोड को बहुत देखा है, किसी और के दृष्टिकोण को प्राप्त करने में वास्तव में सहायक होगा।

@input
let lot = [
          [1, 0, 0],
          [1, 0, 0],
          [1, 9, 0]
          ];
function distanceTraversed(lot) {
  let queue = [[0,0]];
  let count = 0;

  while (queue.length > 0) {
    let directions = queue.shift();
    let i = directions[0];
    let j = directions[1];
    
    if (lot[i][j] === 9) {
      return count;
    }
    //moving up
    if (i > 0 && lot[i][j] > 0) {
      queue.push([i - 1, j]);
    }

    //moving down
    if (i <= lot.length && lot[i][j] > 0) {
      queue.push([i + 1, j]);
    }

    //moving left
    if (j > 0 && lot[i][j] > 0) {
      queue.push([i, j - 1]);
    }

    //moving right
    if (j <= lot[i].length && lot[i][j] > 0) {
      queue.push([i, j + 1]);
    }

    //setting visited cells
    lot[i][j] = -1;
  }
  count++
  return -1;
}
1
DEV1M 31 जिंदा 2021, 11:00

1 उत्तर

सबसे बढ़िया उत्तर

मैं queue की संरचना को बदल दूंगा और साथ ही सूचकांक शून्य पर गिनती जोड़ूंगा।

फिर मैं फिर से विज़िट की गई कोशिकाओं को रोकने के लिए सूचकांक और आने वाले मूल्य के लिए चेक बदल दूंगा।

function distanceTraversed(lot) {
    const queue = [[0, 0, 0]];

    while (queue.length) {
        let [count, i, j] = queue.shift();

        if (lot[i][j] === 9) return count;
        if (lot[i][j] === -1) continue;

        //setting visited cells
        lot[i][j] = -1;

        //moving up
        if (i > 0 && lot[i - 1][j] !== -1) queue.push([count + 1, i - 1, j]);

        //moving down
        if (i + 1 < lot.length && lot[i + 1][j] !== -1) queue.push([count + 1, i + 1, j]);
    
        //moving left
        if (j > 0 && lot[i][j - 1] !== -1) queue.push([count + 1, i, j - 1]);

        //moving right
        if (j + 1 < lot[i].length && lot[i][j + 1] !== -1) queue.push([count + 1, i, j + 1]);
    }
    return -1;
}

let lot = [[1, 0, 0], [1, 0, 0], [1, 9, 0]];

console.log(distanceTraversed(lot));
0
Nina Scholz 31 जिंदा 2021, 12:05
धन्यवाद नीना! मैं गिनती ++ को थोड़ी देर के भीतर रखना भी भूल गया था, लेकिन इससे कोई मदद नहीं मिली। सरणी में एक तत्व के रूप में गिनती जोड़ना समझ में आता है और ऐसा लगता है कि चाल चल रही है। मैं "जारी रखें" कीवर्ड के रिमाइंडर की भी सराहना करता हूं, जो "ब्रेक" की तुलना में यहां अधिक सहायक है। आपको पुनः बहुत बहुत धन्यवाद!
 – 
DEV1M
1 फरवरी 2021, 06:18