<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: minesweeper code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 12 Oct 2008 18:51:26 GMT</pubDate>
    <description>DZone Snippets: minesweeper code</description>
    <item>
      <title>A solution for the Minesweeper problem</title>
      <link>http://snippets.dzone.com/posts/show/5205</link>
      <description>A solution for the Minesweeper problem.&lt;br /&gt; &lt;br /&gt;Problem description:&lt;br /&gt;&lt;a href="http://icpcres.ecs.baylor.edu/onlinejudge/external/101/10189.html"&gt;http://icpcres.ecs.baylor.edu/onlinejudge/external/101/10189.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Author: &lt;a href="http://joanatrindade.wikidot.com"&gt;Joana Matos Fonseca da Trindade&lt;/a&gt;&lt;br /&gt;Date: 2008.03.08&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/* &lt;br /&gt; * A solution for the Minesweeper problem.&lt;br /&gt; * UVa ID: 10189&lt;br /&gt; */&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;#define MINE '*'&lt;br /&gt;#define MATRIX_OFFSET 1&lt;br /&gt;&lt;br /&gt;int main (int argc, const char * argv[]) {&lt;br /&gt;	/* number of lines of the mine field */&lt;br /&gt;	long n;&lt;br /&gt;	&lt;br /&gt;	/* number of colums of the mine field */&lt;br /&gt;	long m;&lt;br /&gt;	&lt;br /&gt;	/* iterators for retrieving the content of each field line*/&lt;br /&gt;	long i, j;&lt;br /&gt;	&lt;br /&gt;	/* field number identifier */&lt;br /&gt;	long fieldNumber = 0;&lt;br /&gt;&lt;br /&gt;	while(scanf("%ld %ld", &amp;n, &amp;m) != EOF) {&lt;br /&gt;			&lt;br /&gt;		/* 0 0, ends the program */&lt;br /&gt;		if (!n &amp;&amp; !m) {&lt;br /&gt;			return 0;&lt;br /&gt;		} else {&lt;br /&gt;			if (fieldNumber &gt; 0) {&lt;br /&gt;				/* &lt;br /&gt;				 * workaround for the extra line on the output, &lt;br /&gt;				 * which was giving me a Wrong Answer verdict..&lt;br /&gt;				 * so only insert an extra line if there's more&lt;br /&gt;				 * to come :-) &lt;br /&gt;				 */&lt;br /&gt;				printf("\n");&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		/* increment field id */&lt;br /&gt;		fieldNumber++;&lt;br /&gt;				&lt;br /&gt;		/* a bidimensional array representing the input mine field */&lt;br /&gt;		char inputField[n + MATRIX_OFFSET + 1][m + MATRIX_OFFSET + 1];&lt;br /&gt;		&lt;br /&gt;		/* a bidimensional array to output the mine field */&lt;br /&gt;		int outputField[n + MATRIX_OFFSET + 1][m + MATRIX_OFFSET + 1];&lt;br /&gt;		&lt;br /&gt;		/* temporary variable to retrieve mine field lines */&lt;br /&gt;		char line[m];&lt;br /&gt;		&lt;br /&gt;		/* init, O(n2) */&lt;br /&gt;		for (i = 0; i &lt; n + MATRIX_OFFSET + 1; i++) {&lt;br /&gt;			for (j = 0; j &lt; m + MATRIX_OFFSET + 1; j++) {&lt;br /&gt;				outputField[i][j] = 0;&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		/* read mine field, O(n2) */&lt;br /&gt;		for (i = 0; i &lt; n; i++) {&lt;br /&gt;			scanf("%s\n",line);&lt;br /&gt;			for (j = MATRIX_OFFSET; j &lt; m + MATRIX_OFFSET; j++) {&lt;br /&gt;				inputField[i + MATRIX_OFFSET][j] = line[j - MATRIX_OFFSET];&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		/* update output, O(n2) */ &lt;br /&gt;		for (i = MATRIX_OFFSET; i &lt; n + MATRIX_OFFSET; i++) {&lt;br /&gt;			for (j = MATRIX_OFFSET; j &lt; m + MATRIX_OFFSET; j++) {&lt;br /&gt;				if (inputField[i][j] == MINE) {&lt;br /&gt;				&lt;br /&gt;					/* upper neighbours */&lt;br /&gt;					outputField[i-1][j-1]++;&lt;br /&gt;					outputField[i-1][j]++;&lt;br /&gt;					outputField[i-1][j+1]++;&lt;br /&gt;					&lt;br /&gt;					/* same level neighbours */&lt;br /&gt;					outputField[i][j-1]++;&lt;br /&gt;					outputField[i][j+1]++;&lt;br /&gt;					&lt;br /&gt;					/* lower neighbours */&lt;br /&gt;					outputField[i+1][j-1]++;&lt;br /&gt;					outputField[i+1][j]++;&lt;br /&gt;					outputField[i+1][j+1]++;&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		/* present output, O(n2) */&lt;br /&gt;		printf("Field #%ld:\n",fieldNumber);&lt;br /&gt;		for (i = MATRIX_OFFSET; i &lt; n + MATRIX_OFFSET; i++) {&lt;br /&gt;			for (j = MATRIX_OFFSET; j &lt; m + MATRIX_OFFSET; j++) {&lt;br /&gt;				if (inputField[i][j] == MINE)&lt;br /&gt;					printf("%c", MINE);&lt;br /&gt;				else	&lt;br /&gt;					printf("%d",outputField[i][j]);&lt;br /&gt;			}&lt;br /&gt;			printf("\n");&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 08 Mar 2008 18:30:03 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5205</guid>
      <author>jmftrindade (Joana M. F. da Trindade)</author>
    </item>
  </channel>
</rss>
