检查路径序列是否访问任何坐标两次

data structurec++server side programmingprogramming

在某些应用中,我们可能对检查路径序列是否访问任何坐标两次感兴趣。这很有用,例如,在 GPS 跟踪系统中,可以检测车辆是否在两点之间来回行驶。在本文中,我们将讨论如何检查路径序列是否访问任何坐标两次,以及它在 C++ 中的实现。

算法

为了解决这个问题,我们可以使用哈希表来跟踪到目前为止我们访问过的所有坐标。我们首先访问序列中的第一个坐标,并将其添加到哈希表中。然后,对于序列中的每个后续坐标,我们检查它是否已经在哈希表中。如果是,我们知道我们之前已经访问过这个坐标,我们可以返回 true。如果不是,我们将其添加到哈希表中并继续下一个坐标。如果我们访问了所有坐标而没有发现任何重复项,我们可以返回 false。

示例

以下是上述算法在 C++ 中的实现−

#include<bits/stdc++.h>
using namespace std;

bool isVisitedTwice(int n, int path[][2]) {
   set<pair<int, int>> visited;
   for(int i=0;i<n;i++) {
      // 检查当前坐标是否已经被访问过
      if(visited.find(make_pair(path[i][0], path[i][1])) != visited.end()) {
         return true;
      }
      visited.insert(make_pair(path[i][0], path[i][1]));
   }
   return false;
}

int main() {

    // 测试用例 1
    int path1[5][2] = {{0,0},{1,1},{2,2},{3,3},{4,4}};
    if(isVisitedTwice(5, path1)) {
        cout << "序列访问一个坐标两次" << endl;
    } else {
        cout << "序列未访问一个坐标两次" << endl;
    }
    
    // 测试用例 2
    int path2[6][2] = {{0,0},{1,1},{2,2},{3,3},{4,4},{3,3}};
    if(isVisitedTwice(6, path2)) {
        cout << "序列访问一个坐标两次" << endl;
    } else {
        cout << "序列没有访问坐标两次" << endl;
    }
    
    // 测试用例 3
    int path3[3][2] = {{0,0},{1,1},{2,2}};
    if(isVisitedTwice(3, path3)) {
        cout << "序列访问坐标两次" << endl;
    } else {
        cout << "序列没有访问坐标两次" << endl;
    }
    
    return 0;
}

输出

序列不会两次访问坐标
序列两次访问坐标
序列不会两次访问坐标

测试用例示例

考虑序列"UDDLLRUUUDU",表示路径"上、下、下、左、左、右、上、上、下、上"。

我们从原点 (0, 0) 开始并遍历路径,在前进过程中更新坐标。

在每一步中,我们检查之前是否已经访问过新坐标。如果是,我们知道序列访问了坐标两次,我们返回 true。如果没有,我们将坐标标记为已访问并继续。

以下是算法对给定序列的工作方式 -

  • 从原点 (0, 0) 开始

  • "U"  向上移动到 (0, 1)。将 (0, 1) 标记为已访问。

  • "D"  向下移动到 (0, 0)。将 (0, 0) 标记为已访问。

  • "D"  向下移动到 (0, -1)。将 (0, -1) 标记为已访问。

  • "L"  向左移动到 (-1, -1)。将 (-1, -1) 标记为已访问。

  • "L"  向左移动到 (-2, -1)。将 (-2, -1) 标记为已访问。

  • "R"  向右移动到 (-1, -1)。此坐标之前已被访问过,因此我们返回 true。

由于该序列访问了坐标两次,因此该函数返回 true。

因此,对于给定的序列"UDDLLRUUUDU",该函数正确返回该序列访问了坐标两次。

结论

在本文中,我们讨论了如何检查路径序列是否访问了任何坐标两次。我们使用哈希表来跟踪迄今为止访问过的所有坐标,并在每一步检查重复项。我们还提供了该算法的 C 实现


相关文章