view arrays/crosses/solution.c @ 0:20fea762903e

Import some exercises and solutions
author Louis Opter <kalessin@kalessin.fr>
date Sat, 29 Jun 2013 19:30:31 -0700
parents
children
line wrap: on
line source

/*
 * Write an algorithm such that if an element in an MxN matrix is 0 is entire
 * row and column is set to 0.
 */

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

char array[4][4] = {
    { 'x', 'x', '0', 'x'},
    { 'x', 'x', 'x', 'x'},
    { 'x', '0', 'x', 'x'},
    { 'x', 'x', 'x', 'x'}
};
enum { size = 4 };

void
print_array(char array[][4])
{
    for (int i = 0; i != size; i++) {
        for (int j = 0; j != size; j++) 
            printf(" %c", array[i][j]);
        printf("\n");
    }
}

void
bomb_array(char array[][4])
{
    bool rows[size] = { false, };
    bool columns[size] = { false, };

    for (int i = 0; i != size; i++) {
        for (int j = 0; j != size; j++) {
            if (array[i][j] == '0') {
                rows[i] = true;
                columns[j] = true;
            }
        }
    }
    for (int i = 0; i != size; i++) {
        for (int j = 0; j != size; j++) {
            if (rows[i] || columns[j])
                array[i][j] = '0';
        }
    }
}

int
main(void)
{
    print_array(array);
    printf("Bombing array…\n");
    bomb_array(array);
    print_array(array);
    return EXIT_SUCCESS;
}