如何获得2D数组中两点的差异

时间:2014-12-15 00:35:29

标签: c++ multidimensional-array difference

#include <iostream>
using namespace std;
int main (int argc, char ** argv)
{
    int c;
    int distance=0;
    int largestdistance=0;
    int sum=0;
    cin >> c;
    int point[c][2];
    for (int i=0; i<c; i++){
        for (int j=0; j<2; j++){
            cin >> point[i][j];
        }
    }
    cout << point[2][0] << " ";
    for (int i=0; i<c; i++){
        for (int j=0; j<2; j++){
            sum += abs(point[0][0]-point[1][0])+abs(point[0][1]-point[1][1]);
        }
        if (sum > largestdistance){
            largestdistance=sum;
        }
        cout << '\n';
        return 0;
    }
}

该程序打印出第一行第一个数字的绝对值减去第二行第一个数字的值,该数字加到第一行第二个数字的绝对值减去第二行第二个数字。我想知道如何制作程序,以便它自动为所有sum += abs(point[0][0]-point[1][0])+abs(point[0][1]-point[1][1]) point[][]执行sum += abs(point[c-1][0]-point[c][0])+abs(point[c-1][1]-point[c][1])

1 个答案:

答案 0 :(得分:2)

如果你引入了一个点类型,这将更加清晰:

struct Point {
    int x, y;
};

int manhattan_dist(const Point& p, const Point& q) {
    return abs(p.x - q.x) + abs(p.y - q.y);
}

有了这个,循环就容易多了:

int sum = 0;
for (int i = 0; i < c - 1; ++i) {  // stop before c-1, so i and i+1 are valid
    sum += manhattan_dist(points[i], points[i+1]);
}

Btw int point[c][2];是非标准代码,因为c不是编译时常量。您需要动态分配数组:

Point* points = new Point[c];

或者,最好是:

std::vector<Point> points(c);