Я застрял в чтении 2D-массива из текстового файла, но я не мог сделать это. У меня есть три [] [] массив данных, которые вы видите в коде. Мне нужно прочитать его из текста вместо определения в программе. И я вставляю эти данные в программу.
Код:
// C++ program for Dynamic
// Programming implementation of
// Max sum problem in a triangle
#include<bits/stdc++.h>
using namespace std;
#define N 4
int sumRec[N];
bool checkPrimeNumber(int n)
{
//cout << n;
bool flag = true;
for(int a = 2; a <= n/2; ++a)
{
if(n%a == 0)
{
flag = false;
}
}
//if number is 1 return false. 1 is not prime
if(n == 1)
flag = false;
return flag;
}int maxPathSum(int tri[][N], int row, int col, int sum)
{
bool isPrime = checkPrimeNumber(tri[row][col]);
if(isPrime == true){
//Do nothing..
}
else if(row + 1 >= N){
sum = sum + tri[row][col];
if(sumRec[col]<sum)
sumRec[col]= sum;
}
else{
sum = sum + tri[row][col];
maxPathSum(tri, row + 1, col, sum);
maxPathSum(tri, row + 1, col + 1, sum);
}
}
int main()
{
int maxSum = 0;
int tri[N][N] = { {1, 0, 0, 0},
{8, 4, 0, 0},
{2, 6, 9, 0},
{8, 5, 9, 3}};
maxPathSum(tri, 0, 0, 0);
for (int i=0; i < N ; i++)
{
if(sumRec[i] >= maxSum)
maxSum = sumRec[i];
}
cout << maxSum;
return 0;
}
Предполагая, что вы знаете N заранее, это не слишком сложно:
int tri[N][N]
ifstream ifs("yourfile.dat");
for (size_t i=0; i < N; i ++)
for (size_t j=0; j < N; j++)
ifs >> tri[i][j];
Этот (простой) подход работает для файлов следующей формы, новых строк и пробелов, разделенных токенами. Файл с N = 5 будет выглядеть так:
1 2 3 4 5
2 3 4 5 6
3 1 4 2 5
6 2 4 2 1
6 2 3 4 5
Относительно вашего последующего комментария: Чтение треугольной матрицы возможно почти таким же образом. Как уже говорилось, программное обеспечение считывает любую последовательность целых чисел, разделенных пробелами, символами табуляции, переводами строк и т. П., И не заботится о формате, выходящем за рамки этого. На самом деле, вы можете иметь треугольный файл или что-то еще. Однако для треугольной матрицы двумерный массив не может быть оптимальным хранилищем …
Конкретнее: для треугольной матрицы в файле измените значение в соответствии с ожидаемыми числами, например,
for(i=0; i<N; i++)
for j=0; j <=i; j++)
cin >> tri[i][j];
будет грубо делать это: внешнее значение пересекает ожидаемые линии, внутреннее значение равно 1 для первого, 2 для второго и так далее. Тем не менее, вы также можете добавить
tri[j][i] = tri[i][j];
в цикл, чтобы заполнить обе стороны квадратного пространства хранения симметричной матрицей, составленной из вашей диагональной матрицы.
По-прежнему целесообразно четко определить формат файла и концепцию хранения в памяти, чтобы написать синтаксический анализатор, который может привести к сбою для файлов, не имеющих правильного формата и формы.
Других решений пока нет …