2017-12-16 28 views
2
C++에서

은 파일에서 NxN 매트릭스 스타일 입력을 읽고 N가 주어진다 가정 O(n^2)보다 점근 복잡도를 갖는 시간의 이차원 배열에 할당 할 수있다 첫 번째 줄과 다른 줄은 정수 사이에 공백이 있습니까? 입력 배열을 가로 질러 하나씩 배열을 채울 수 있습니다.이 정수는 비용이 O(n^2)입니다.C++ 읽기 매트릭스 형 입력

#define MAX_SIZE 1000 

std::string row,temp; 
std::ifstream inpfile("input.txt"); 
inpfile>>row; 
int size=std::stoi(row); 
static int M[MAX_SIZE][MAX_SIZE]; 

for(int i=0;i<size;++i){ 
    for(int j=0;j<size;++j){ 
     inpfile>>temp; 
     A[i][j]=std::stoi(temp); 
    } 
} 

은 그냥 nth line을 읽고 linear time 시간의 복잡성을 줄일 수 배열 (또는 컨테이너)의 nth row을 만드는 같은 것을 생각한다. 주어진 행렬의 모든 요소를 ​​반복하는 것보다 나은 구현이 있습니까?

+0

'int [크기] [크기];'- 이것은 유효하지 않습니다. C++. C++의 배열은 변수가 아닌 항목 수를 나타내는 컴파일 타임 상수를 사용하여 선언됩니다. – PaulMcKenzie

+0

참. 내 질문을 편집했습니다. – kntgu

+1

매트릭스가 어떻게 배치되어 있더라도 매트릭스를 채우기 위해 여전히 N x N 값을 읽을 필요가 있으므로 귀하의 질문을 이해할 수 없습니다. – PaulMcKenzie

답변

1

N이 int 인 루프는 O (N)을 통해 반복되지만, 라인과 관련하여 항상 O (N^2)를 갖습니다. 아마도 이것이 당신이 가질 수있는 가장 가까운 해결책 일 것입니다.

int temp; 
int countX = 0; 
while(inFile >> temp) 
{ 
    A[countX/size][countX % size] = std::stoi(temp); 
    countX++; 
} 

이 정보가 도움이되기를 바랍니다.

+0

내 코드에서이 대답을 사용할 것 같습니다. 고맙습니다! – kntgu

+0

@ ÉŊÉ가 도움을 주면 답변을 받아 들일 수 있습니다. Np는 항상 기꺼이 도와 드리겠습니다. –