Если ты волновой алгоритм пишешь то задача не совсем верна...надо заполнять до тех пор пока финиш не покроется...т.е. перестанет быть нулем...а так будет медленее но заполняться будет до краев...
| Код | #include <stdio.h> #include <string.h>
const int n = 10; const int m = 10;
bool filled( int a[n][n] ) { for ( int i = 0; i < n; ++i ) { for ( int j = 0; j < m; ++j ) { if ( a[i][j] == 0 ) { return false; } } } return true; }
void vset( int a[n][m], int i, int j ) { int v = a[i][j] + 1; if ( i - 1 >= 0 && a[i - 1][j] == 0 ) a[i - 1][j] = v; if ( j - 1 >= 0 && a[i][j - 1] == 0 ) a[i][j - 1] = v; if ( i + 1 < n && a[i + 1][j] == 0 ) a[i + 1][j] = v; if ( j + 1 < m && a[i][j + 1] == 0 ) a[i][j + 1] = v; }
void fill( int a[n][m], int si, int sj ) { vset(a, si, sj); int v = a[si][sj] + 1; while ( !filled( a ) ) { for ( int i = 0; i < n; ++i ) { for ( int j = 0; j < m; ++j ) { if ( a[i][j] == v ) { vset( a, i, j ); } } } ++v; } }
int main() { int a[n][m]; memset( a, 0, n * m * sizeof( int ) ); a[0][0] = 1; fill( a, 0, 0 ); for ( int i = 0; i < n; ++i ) { for ( int j = 0; j < n; ++j ) { printf( "%d ", a[i][j]); } printf("\n"); } }
| |