Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Заполнение матрицы смежности


Автор: AlexeroN 22.5.2010, 21:23
Задача в следующем: выдать в файл матрицу смежности, где на главной диагонали должны стоять нули, а остальные элементы которой заполняются случайными числами. Написал такой вот код и где-то допустил ошибку (в программировании не силен), люди добрые подскажите что нужно исправить в тексте программы 
Код

#include<iostream>
#include<fstream>
#include <cstdlib>

using namespace std;

int main()
{
    setlocale(0,"rus");
    ofstream matr;
    matr.open("input.txt");
    int n;
    cout << "Введите число городов, с которым вы хотите работать:" << endl;
    cin >> n;
    int **a;
    a = new int*[n];
    for(int i = 0;i < n;i++)
    {
        a[i] = new int [n];
        for(int j = 0;j <= n;j++)
        {
            *(*(a+i)+j) = 0;//зануляем массивчик
            srand(12345);
            a[i][j] = a[j][i] = rand()%400;
            a[i][i] = 0;
            matr << a[i][j];
            matr << a[i][i];
            delete []a;
        }
    }
    matr.close();
    return 0;
}

Автор: yeputons 26.5.2010, 20:05
  • Код

    *(*(a+i)+j) = 0;//зануляем массивчик

    Зачем нужна эта строчка? Мы же всё равно потом перезапишем на rand()
  • srand() вызваем один раз и в начале. Иначе будут одинаковые значения постоянно.
  • Код

    delete[] a

    вызываем один раз в конце (после всех циклов). И еще надо будет добавить такой цикл для удаления вложенных массивов (перед строчкой delete[] a):
    Код

    for (int i = 0; i < n; i++)
      delete[] a[i]

    Вы же new для них вызываете? Удалить тоже надо.
  • Код

    for(int j = 0;j < n;j++)

    Цикл делаем не до n, а до n-1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)