生活随笔
收集整理的這篇文章主要介紹了
Java实现 蓝桥杯VIP 算法提高 扫雷
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法提高 掃雷
時間限制:1.0s 內存限制:256.0MB
問題描述
掃雷游戲你一定玩過吧!現在給你若干個n×m的地雷陣,請你計算出每個矩陣中每個單元格相鄰單元格內地雷的個數,每個單元格最多有8個相鄰的單元格。 0<n,m<=100
輸入格式
輸入包含若干個矩陣,對于每個矩陣,第一行包含兩個整數n和m,分別表示這個矩陣的行數和列數。接下來n行每行包含m個字符。安全區域用‘.’表示,有地雷區域用’‘表示。當n=m=0時輸入結束。
輸出格式
對于第i個矩陣,首先在單獨的一行里打印序號:“Field #i:”,接下來的n行中,讀入的’.'應被該位置周圍的地雷數所代替。輸出的每兩個矩陣必須用一個空行隔開。
樣例輸入
4 4
…
…
.…
…
3 5
**…
…
.…
0 0
樣例輸出
Field #1:
100
2210
110
1110
Field #2:
**100
33200
1*100
(注意兩個矩陣之間應該有一個空行,由于oj的格式化這里不能顯示出來)
數據規模和約定
0<n,m<=100
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class 掃雷 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);List<StringBuffer> sb=new ArrayList<StringBuffer>();int count=1;while(true){int a=sc.nextInt();int b=sc.nextInt();if(a==b&&a==0)break;int[][] arr=new int[a][b];sc.nextLine();for(int i=0;i<a;i++){String str=sc.nextLine();for(int j=0;j<b;j++){if(str.charAt(j)=='*')arr[i][j]=9;else if(str.charAt(j)=='.')arr[i][j]=0;}}for(int i=0;i<a;i++){for(int j=0;j<b;j++){if(arr[i][j]==9){if(i-1>=0&&j-1>=0&&arr[i-1][j-1]!=9)arr[i-1][j-1]++;if(i-1>=0&&arr[i-1][j]!=9)arr[i-1][j]++;if(i-1>=0&&j+1<b&&arr[i-1][j+1]!=9)arr[i-1][j+1]++;if(j-1>=0&&arr[i][j-1]!=9)arr[i][j-1]++;if(j+1<b&&arr[i][j+1]!=9)arr[i][j+1]++;if(i+1<a&&j-1>=0&&arr[i+1][j-1]!=9)arr[i+1][j-1]++;if(i+1<a&&arr[i+1][j]!=9)arr[i+1][j]++;if(i+1<a&&j+1<b&&arr[i+1][j+1]!=9)arr[i+1][j+1]++;}}}String s="Field #"+count+":";sb.add(new StringBuffer(s));for(int i=0;i<a;i++){StringBuffer bu=new StringBuffer();for(int j=0;j<b;j++){if(arr[i][j]==9)bu.append('*');elsebu.append(arr[i][j]); }sb.add(bu);}StringBuffer bb=new StringBuffer('\n');sb.add(bb);count++; }for(int i=0;i<sb.size();i++)System.out.println(sb.get(i));}}
總結
以上是生活随笔為你收集整理的Java实现 蓝桥杯VIP 算法提高 扫雷的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。