2010年4月23日 星期五

Problem 10189 Minesweeper,踩地雷

此題一看就知道這是踩地雷的遊戲,「*」是地雷,「.」則是待填數字,待填數字則是要填在這個格子的周圍,有幾個地雷。

只需建立一個字元陣列 char 並且讀取範圍還有內容,C 語言程式碼如下:
char field[102][102];
for (i = 0; i < n; i ++)
scanf("%s", field[i]);

再來判斷每一個「.」周圍有幾顆地雷,最後印出。C 語言程式碼如下:
for (i = 0; i < n; i ++)
{
for (j = 0; j < m; j ++)
{
if (field[i][j] == '*') continue;
else
{
int count = 0;
/* 上方 */
if (i != 0 && field[i - 1][j] == '*') count ++;
/* 下方 */
if (i != n - 1 && field[i + 1][j] == '*') count ++;
/* 左方 */
if (j != 0 && field[i][j - 1] == '*') count ++;
/* 右方 */
if (j != m - 1 && field[i][j + 1] == '*') count ++;
/* 左上 */
if (i != 0 && j != 0 && field[i - 1][j - 1] == '*') count ++;
/* 右上 */
if (i != 0 && j != m - 1 && field[i - 1][j + 1] == '*') count ++;
/* 左下 */
if (i != n - 1 && j != 0 && field[i + 1][j - 1] == '*') count ++;
/* 右下 */
if (i != n - 1 && j != m - 1 && field[i + 1][j + 1] == '*') count ++;
field[i][j] = count + '0';
}
}
}
printf("Field #%d:\n", caseNum ++);
for (i = 0; i < n; i ++)
printf("%s\n", field[i]);

By David.K

p10189題目連結
回ACM題庫目錄
回首頁

沒有留言: