查找对象所需扫描次数的C++代码


假设我们有一个m x n维的网格。一个物体放置在单元格(ix, iy),我们需要从起始位置(sx, sy)开始扫描查找该物体。扫描算法扫描网格的第i行和第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

更新于:2022年3月29日

浏览量:135

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.