Parece un problema interesante, tienes algo hecho ya? Así no partimos de 0 y además creo que la tarea es tuya no nuestra.
Un saludo
De momento tengo esto, pero esta inacabado porque llegado a un punto me lie demasiado xD
Lo que tenia en mente era algo como esto para una matriz 3x3 que tiene 5 diagonales (las secundarias).
k = 0;
(0,0)
--------
k = 1;
(0,1)
(1,0)
-------
k=2;
(0,2)
(1,1)
(2,0)
---
k=3;
(1,2)
(2,1)
----
k = 4;
(2,2)
O sea vi que el patrón era que ibas sumándole 1 al numero de filas y restándole al de columnas hasta que en el de columnas llegabas al limite entonces ese lo dejabas fijos en el primer caso y sumabas uno al nº de filas y luego seguías normalmente sumando y restando filas y columnas respectivamente como en el ejemplo.
Y que siempre cumpla que f+c = k.
Uno de los problemas que tenia era que no sabia exactamente donde podría poner la variable f para modificarla.
Aqui lo que tengo, se que esta mal pero vamos aprendiendo
#include <iostream>
#include <vector>
using namespace std;
typedef vector< vector<int> > Ocea;
void llegir_matriu(Ocea& a) {
int mida = a.size();
for (int i = 0; i < mida; ++i) {
for (int j = 0; j < mida; ++j) cin >> a[i][j];
}
}
void propaga(Ocea& oc, int f) {
int mida = oc.size();
int k = 0;
while (k < mida) {
int i, j, ai, aj;
i = j = ai = aj = 0;
while (i < mida) {
if (ai+aj == k) {
oc[ai][aj] = (oc[ai][aj] + f) - (oc[ai][aj]+f)/2;
if (ai < mida and aj > 0) {
++ai;
--aj;
}
else {
ai = i;
aj = j;
if (j == mida-1) ++i;
else ++j;
}
}
}
f = (f+oc[ai][aj])/2;
++k;
}
}
void escriu(const Ocea& mines) {
int mida = mines.size();
for (int i = 0; i < mida; ++i) {
cout << mines[i][0];
for (int j = 1; j < mida; ++j) {
cout << " " << mines[i][j];
}
cout << endl;
}
}
int main() {
int m;
cin >> m;
for (int k = 0; k < m; ++k) {
int f, n;
cin >> f >> n;
Ocea burra(n, vector<int>(n));
llegir_matriu(burra);
propaga(burra, f);
escriu(burra);
cout << endl;
}
}