Почему не сравнивает точки с номером больше 5?

Программа должна сравнивать точки и выводить найменшее расстояние между ними, но сравнивает до 5 точки, и дальше не работает.

#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <math.h>
using namespace std;





int main()
{
    setlocale(0, "");
    srand(time(NULL));
    double mas[10][2];
    for (int j = 0; j < 10; j++)
    {
        cout << "Точка " << j << endl;
        for (int i = 0; i < 2; i++)
        {


            mas[i][j] = rand() % 10;
            cout << mas[i][j] << " ";

        }
        cout << endl;
    }
    double minrasst = mas[0][0]; // :D
    double rasst;
    cout << endl;
    for (int j = 0; j < 10; j++)
    {
        cout << endl;
        for (int k = j; k < 10; k++)
        {
            if (k != j)
            {
                rasst = (pow((pow((mas[j][0] - mas[k][0]), 2) + (pow((mas[j][1] - mas[k][1]), 2))), 0.5));
                //     _____________________
                // |AB|=/(x2-x1)^2+(y2-y1)^2 '
                cout << j << "i" << k << "  " << rasst << endl;
                if (rasst < minrasst)
                {
                    if (rasst > 0 && minrasst > 0)
                    {
                        minrasst = rasst;
                    }
                }
            }

        }

    }
    cout << "minrasst = " << minrasst;
}

Ответы (1 шт):

Автор решения: DmitryK

Потому что у вас неопределенное поведение, связанное с выходом за пределы массива. У вас массив mas[10][2], а обращаетесь вы к нему как mas[2][10].

double mas[10][2];
for (int j = 0; j < 10; j++)
   for (int i = 0; i < 2; i++)
       mas[i][j] = rand() % 10; // i изменяется от 0 до 2  j изменяется от 0 до 10
// должно быть 
mas[j][i] = rand() % 10;

И немного красоты для кода:

int main()
{
    setlocale(0, "");
    srand(time(NULL));
    double mas[10][2];
    for (int j = 0; j < 10; j++)
    {
        cout << "Точка " << j << " - ";
        mas[j][0] = rand() % 10;
        mas[j][1] = rand() % 10;
        cout << "(" << mas[j][0] << "," << mas[j][1] << ")\n";
    }
    
    double minrasst = 1e9; // :D
    double rasst;
    
    for (int j = 0; j < 9; j++)
    {
        cout << endl;
        for (int k = j+1; k < 10; k++)
        {
            rasst = (pow((pow((mas[j][0] - mas[k][0]), 2) + (pow((mas[j][1] - mas[k][1]), 2))), 0.5));
            // |AB|=/(x2-x1)^2+(y2-y1)^2 '
            
            cout << j << "i" << k << "  " << rasst << endl;
            if (rasst < minrasst)
                minrasst = rasst;
        }
    }
    cout << "\nminrasst = " << minrasst;
}
→ Ссылка