UVaOJ 10189 - Minesweeper

来源:互联网 发布:淘宝店铺怎么管理 编辑:程序博客网 时间:2024/04/26 01:57

这个题目也是先在Programming Challenges先用JAVA写的,然后很久都没能AC(原因不详)。后来学C++,就写了一个C++版的。

1005024410189MinesweeperAcceptedC++0.0122012-04-29 01:11:25我这里用了设置初始大小的2维vector,当时还是第一次用。对vector基本上没概念,书上还是教的用指针和new来写动态数组。

另外我把'*'的值设置为了10,用来和其他空的位置区分开来,因为最大雷数也只能到达8。

#include <iostream>#include <string>#include <vector>int main(){using namespace std;int f = 0;while(true){f++;int x;int y;cin >>x>>y;if (x==0 || y==0)break;vector<vector<int> >mn(x,vector<int>(y));for (int i=0;i<x;i++){for (int j=0;j<y;j++){char temp;cin>>temp;if (temp == '*')mn[i][j] = 10;elsemn[i][j] = 0;}}int  ya[] = {-1,0,1,1,1,0,-1,-1}; //reversed i guessint  xa[] = {-1,-1,-1,0,1,1,1,0};for (int i=0;i<x;i++){for (int j=0;j<y;j++){if (mn[i][j]>=7){for (int p = 0; p< 8; p++){if (i+xa[p]>=0 && i+xa[p]< x && j+ya[p] >=0 && j+ya[p] < y){mn[i+xa[p]][j+ya[p]] ++;}}}}}if (f>1)cout<<'\n';cout<<"Field #"<<f<<":"<<endl;for (int i=0;i<x;i++){for (int j=0;j<y;j++){if (mn[i][j] < 10)cout<<mn[i][j];elsecout<<'*';}cout<<endl;}}}