Tienes dos opciones: usar un flag de estado para cada celda o crear una nueva lista de coordenadas que en vez de guardar el valor guarden el flag de estado; es mas facil hacerlo todo en uno.
Primero declaras las definiciones:
Código C:
Ver original#define FILS 3
#define COLS 3
#define IVALOR 0
#define IVISTO 1
Despues la matriz que ahora incluye un espacio extra para el flag de estado, y la rellenas dejando inicialmente como no visitado:
Código C:
Ver originalint mat[FILS][COLS][2], i, j;
for(i=0; i<FILS; i++) {
for (j=0; j<COLS; j++) {
mat
[i
][j
][IVALOR
] = rand()%10;//sitio para el valor mat[i][j][IVISTO] = 0;//flag de estado, inicialmente como no visitado
}
}
Ahora solo tienes que pedir coordenadas y comprovar el flag, si no está marcado como visto es que es valido, y una vez visitado lo marcas para evitar siguientes accesos
Código C:
Ver originalprintf("\nIngrese Columna : "); if(!mat[f][c][IVISTO]) {
mat[f][c][IVISTO] = 1;
}
Ten en cuenta que te falta la comprovacion de error para asegurar que la fila y la columna estan en el rango valido, de lo contrario se producirá una violacion de acceso (segmentation fault).
*Nota: los defines son para clarificar el codigo, en este caso son muy evidentes y no serian necesarios pero te facilitaran el trabajo en caso que quieras modificar algun valor.
Saludos
vosk