Eis a versão do código da função distancias que manipula a fila diretamente. Nesse caso, faz mais sentido tratar fila, p e u como variáveis locais:
#define N 100 int dist[N]; // variável global void distancias (int A[][N], int c) { int fila[N], p, u; for (int j = 0; j < N; ++j) dist[j] = N; dist[c] = 0; p = 0; u = 1; fila[0] = c; // c entra na fila while (p != u) { int i = fila[p++]; // i sai da fila for (int j = 0; j < N; ++j) if (A[i][j] == 1 && dist[j] >= N) { dist[j] = dist[i] + 1; fila[u++] = j; // j entra na fila } } }
É instrutivo reescrever o código sem os ++
:
#define N 100 int dist[N]; void distancias (int A[][N], int c) { int fila[N], p, u; for (int j = 0; j < N; j = j+1) dist[j] = N; dist[c] = 0; p = 0; u = 1; fila[0] = c; while (p != u) { int i = fila[p]; p = p+1; for (j = 0; j < N; j = j+1) if (A[i][j] == 1 && dist[j] >= N) { dist[j] = dist[i] + 1; fila[u] = j; u = u+1; } } }