मान लीजिए, हमें m x n विमाओं का एक ग्रिड दिया गया है। एक ऑब्जेक्ट को सेल (ix, iy) पर रखा गया है और हमें ऑब्जेक्ट स्कैनिंग को प्रारंभिक स्थिति (sx, sy) से ढूंढना है। स्कैनिंग एल्गोरिथ्म ग्रिड की ith पंक्ति और j-वें कॉलम को स्कैन करता है यदि यह ग्रिड के सेल (i, j) पर स्थित है। यदि उसे वस्तु मिल गई है, तो स्कैनिंग बंद हो जाती है; यदि नहीं, तो स्कैनिंग पॉइंटर सेल में स्थिति (i + 1, j + 1) में चला जाता है और फिर उसी तरह स्कैन करता है। यह तब तक जारी रहता है जब तक कि आइटम नहीं मिल जाता। स्थितियों को देखते हुए, हमें यह पता लगाना होगा कि ऑब्जेक्ट को खोजने के लिए एल्गोरिदम को कितने स्कैन करने होंगे।
इसलिए, यदि इनपुट n =20, m =20, sx =3, sy =2, ix =12, iy =4 जैसा है, तो आउटपुट 2 होगा।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
t1 := (if sx <= ix, then ix - sx, otherwise 2 * n - ix - sx) t2 := (if sy <= iy, then iy - sy, otherwise 2 * m - iy - sy) print(minimum of (t1, t2))
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; #define N 100 void solve(int n, int m, int sx, int sy, int ix, int iy) { int t1 = (sx <= ix ? ix - sx : 2 * n - ix - sx); int t2 = (sy <= iy ? iy - sy : 2 * m - iy - sy); cout<< min(t1, t2); } int main() { int n = 20, m = 20, sx = 3, sy = 2 , ix = 12, iy = 4; solve(n, m, sx, sy, ix, iy); return 0; }
इनपुट
20, 20, 3, 2 , 12, 4
आउटपुट
2