在某些应用程序中,我们可能有兴趣检查路径序列是否访问任何坐标两次。例如,这在 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++) { // Check if the current coordinate has already been visited 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() { // Test case 1 int path1[5][2] = {{0,0},{1,1},{2,2},{3,3},{4,4}}; if(isVisitedTwice(5, path1)) { cout << "Sequence visits a coordinate twice" << endl; } else { cout << "Sequence does not visit a coordinate twice" << endl; } // Test case 2 int path2[6][2] = {{0,0},{1,1},{2,2},{3,3},{4,4},{3,3}}; if(isVisitedTwice(6, path2)) { cout << "Sequence visits a coordinate twice" << endl; } else { cout << "Sequence does not visit a coordinate twice" << endl; } // Test case 3 int path3[3][2] = {{0,0},{1,1},{2,2}}; if(isVisitedTwice(3, path3)) { cout << "Sequence visits a coordinate twice" << endl; } else { cout << "Sequence does not visit a coordinate twice" << endl; } return 0; }
Sequence does not visit a coordinate twice Sequence visits a coordinate twice Sequence does not visit a coordinate twice
考虑代表路径“上、下、下、左、左、右、上、上、下、上”的序列“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 实现
Das obige ist der detaillierte Inhalt vonÜberprüfen Sie, ob eine Pfadsequenz eine Koordinate zwei- oder mehrmals besucht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!