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;
    }
}