Estoy tratando de trabajar con vectores de vectores de ints para un solucionador de sudoku que estoy escribiendo.¿Cómo trabajo con vectores anidados en C++?
Pregunta 1:
Si voy a acceder a un vector de mi 2d por el índice, tengo que inicializarlo con el tamaño adecuado en primer lugar?
Por ejemplo:
typedef vector<vector<int> > array2d_t;
void readAPuzzle(array2d_t grid)
{
for(int i = 0; i < 9; i++)
for(int j = 0; j < 9; j++)
cin >> grid[i][j];
return;
}
int main()
{
array2d_t grid;
readAPuzzle(grid);
}
Will SEG culpa. Supongo que esto se debe a que está intentando acceder a los elementos de la grilla que aún no se han inicializado.
He intercambiado línea de declaración de rejilla con:
array2d_t grid(9, vector<int>(9, 0));
y esto parece deshacerse de este fallo seg. ¿Es esta la manera correcta de manejarlo?
Pregunta 2:
¿Por qué es que cuando trato de leer en mi rejilla de cin, y luego imprimir la red, la red está en blanco?
estoy usando el siguiente código para hacerlo:
void printGrid(array2d_t grid)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cout << grid[i][j] + " ";
}
cout << endl;
}
}
void readAPuzzle(array2d_t grid)
{
for(int i = 0; i < 9; i++)
for(int j = 0; j < 9; j++)
cin >> grid[i][j];
return;
}
int main()
{
array2d_t grid(9, vector<int>(9, 0));
printGrid(grid);
readAPuzzle(grid);
printGrid(grid);
}
Y yo intente ejecutar mi programa como:
./a.out < sudoku-test
Dónde sudoku-prueba es un archivo que contiene lo siguiente:
3 0 0 0 0 0 0 0 0
5 8 4 0 0 2 0 3 0
0 6 0 8 3 0 0 7 5
0 4 1 0 0 6 0 0 0
7 9 0 0 2 0 0 5 1
0 0 0 9 0 0 6 8 0
9 3 0 0 1 5 0 4 0
0 2 0 4 0 0 5 1 8
0 0 0 0 0 0 0 0 6
La primera llamada a printGrid() da una cuadrícula en blanco, cuando en cambio debería ver una grilla de 9x9 0's ya que así es como lo inicialicé. La segunda llamada debe contener la grilla de arriba. Sin embargo, las dos veces está en blanco.
¿Alguien puede arrojar algo de luz sobre esto?
pago y envío si usted quiere manera más fácil tratar con datos multidimensionales dinámicos – Anycorn