Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

DZone's Guide to

# A Solution For The Minesweeper Problem

·
Free Resource

Comment (0)

Save
{{ articles[0].views | formatCount}} Views
```A solution for the Minesweeper problem.

Problem description:
http://icpcres.ecs.baylor.edu/onlinejudge/external/101/10189.html

Author: Joana Matos Fonseca da Trindade
Date: 2008.03.08

```
/*
* A solution for the Minesweeper problem.
* UVa ID: 10189
*/
#include

#define MINE '*'
#define MATRIX_OFFSET 1

int main (int argc, const char * argv[]) {
/* number of lines of the mine field */
long n;

/* number of colums of the mine field */
long m;

/* iterators for retrieving the content of each field line*/
long i, j;

/* field number identifier */
long fieldNumber = 0;

while(scanf("%ld %ld", &n, &m) != EOF) {

/* 0 0, ends the program */
if (!n && !m) {
return 0;
} else {
if (fieldNumber > 0) {
/*
* workaround for the extra line on the output,
* which was giving me a Wrong Answer verdict..
* so only insert an extra line if there's more
* to come :-)
*/
printf("\n");
}
}

/* increment field id */
fieldNumber++;

/* a bidimensional array representing the input mine field */
char inputField[n + MATRIX_OFFSET + 1][m + MATRIX_OFFSET + 1];

/* a bidimensional array to output the mine field */
int outputField[n + MATRIX_OFFSET + 1][m + MATRIX_OFFSET + 1];

/* temporary variable to retrieve mine field lines */
char line[m];

/* init, O(n2) */
for (i = 0; i < n + MATRIX_OFFSET + 1; i++) {
for (j = 0; j < m + MATRIX_OFFSET + 1; j++) {
outputField[i][j] = 0;
}
}

/* read mine field, O(n2) */
for (i = 0; i < n; i++) {
scanf("%s\n",line);
for (j = MATRIX_OFFSET; j < m + MATRIX_OFFSET; j++) {
inputField[i + MATRIX_OFFSET][j] = line[j - MATRIX_OFFSET];
}
}

/* update output, O(n2) */
for (i = MATRIX_OFFSET; i < n + MATRIX_OFFSET; i++) {
for (j = MATRIX_OFFSET; j < m + MATRIX_OFFSET; j++) {
if (inputField[i][j] == MINE) {

/* upper neighbours */
outputField[i-1][j-1]++;
outputField[i-1][j]++;
outputField[i-1][j+1]++;

/* same level neighbours */
outputField[i][j-1]++;
outputField[i][j+1]++;

/* lower neighbours */
outputField[i+1][j-1]++;
outputField[i+1][j]++;
outputField[i+1][j+1]++;
}
}
}

/* present output, O(n2) */
printf("Field #%ld:\n",fieldNumber);
for (i = MATRIX_OFFSET; i < n + MATRIX_OFFSET; i++) {
for (j = MATRIX_OFFSET; j < m + MATRIX_OFFSET; j++) {
if (inputField[i][j] == MINE)
printf("%c", MINE);
else
printf("%d",outputField[i][j]);
}
printf("\n");
}

}

return 0;
}

``````
Topics:

Comment (0)

Save
{{ articles[0].views | formatCount}} Views

Opinions expressed by DZone contributors are their own.