我被困在从文本文件中读取2D数组,但我无法做到。我有你在代码中看到的tri [] []数组数据。我需要从文本中读取它而不是在程序中定义。然后我将这些数据插入到程序中。
代码:
// 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;
}
答案 0 :(得分:1)
假设你事先知道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
关于你的后续评论:以非常相同的方式读取三角矩阵是可能的。如上所述,该软件读取由空格,制表符,换行符或类似物分隔的任何整数序列,并不关心除此之外的格式。事实上,你可以有一个三角形文件或其他什么。但是,对于三角矩阵,2D阵列可能不是最佳存储...
具体一点:对于文件中的三角矩阵,请根据您期望的数字更改for,例如
for(i=0; i<N; i++)
for j=0; j <=i; j++)
cin >> tri[i][j];
将粗略地执行:外部超过预期的行,内部为第一个为1,第二个为2,依此类推。但是,您也可以添加
tri[j][i] = tri[i][j];
到循环中,以便用对角矩阵制作的对称矩阵填充方形存储空间的两边。
仍然建议您明确定义文件格式和内存存储概念,以便编写一个解析器,对于不具有正确格式和形状的文件,该解析器可能会失败。