Google2015校招在线測试题1----扫雷最少点击次数
Problem
Minesweeper is a computer game that became popular in the 1980s, and is still included in some versions of the Microsoft Windows operating system. This problem has a similar idea, but it does not assume
you have played Minesweeper.
In this problem, you are playing a game on a grid of identical cells. The content of each cell is initially hidden. There are M mines hidden in M different cells of the grid. No other cells contain mines.
You may click on any cell to reveal it. If the revealed cell contains a mine, then the game is over, and you lose. Otherwise, the revealed cell will contain a digit between 0 and 8, inclusive, which corresponds to the number of neighboring cells that contain
mines. Two cells are neighbors if they share a corner or an edge. Additionally, if the revealed cell contains a 0, then all of the neighbors of the revealed cell are automatically revealed as well, recursively. When all the cells that don't contain mines have
been revealed, the game ends, and you win.
For example, an initial configuration of the board may look like this ('*' denotes a mine, and 'c' is the first clicked cell):
*..*...**.
....*.....
..c..*....
........*.
..........
There are no mines adjacent to the clicked cell, so when it is revealed, it becomes a 0, and its 8 adjacent cells are revealed as well. This process continues, resulting in the following board:
*..*...**.
1112*.....
00012*....
00001111*.
00000001..
At this point, there are still un-revealed cells that do not contain mines (denoted by '.' characters), so the player has to click again in order to continue the game.
You want to win the game as quickly as possible. You want to find the minimum number of clicks to win the game. Given the size of the board (N x N), output such minimum number of clicks.
Input
The first line of the input gives the number of test cases, T. Ttest cases follow. First line of each test case contains one integer N. N lines strings with length N follows
containing '*' and '.', denotes the Minesweeper initial board.
Output
For each test case, output one line containing "Case #x: y", where x is the test case number (starting from 1) and y is the minimum number of clicks to win.
Limits
1 ≤ T ≤ 100.
Small dataset
1 ≤ N ≤ 50.
Large dataset
1 ≤ N ≤ 300.
思路:简单地说就是给出一个扫雷地图,算出最少点击次数。使得全部非地雷区被訪问过。须要一个数组存每一个位置周围地雷数目。点击到地雷数为0的时候将自己主动訪问呢周围八个区域,并且会递归訪问0的区域。
所以解题方法事实上就仅仅要是须要深搜。先将地雷数为0的訪问,然后深搜訪问。到最后再訪问那些非地雷非0的区域,就能实现最少点击。
代码:
/*2014-10-16 for google graduates online test
*author:zhuangweibiao
*/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
string str[302];//存扫雷矩阵
int num[302][302];
bool visit[302][302];
void dfs(int i, int j, int n)
{
visit[i][j] = true;
for(int ii = i - 1; ii <= i + 1; ii++)
for(int jj = j - 1; jj <= j + 1; jj++)
{
if(ii >= 0 && ii < n && jj >= 0 && jj < n && str[ii][jj] != '*' && !visit[ii][jj])
{
if(num[ii][jj] != 0)
visit[ii][jj] = true;
else
dfs(ii, jj, n);
}
}
}
int main()
{
ifstream ifile("A-large-practice (1).in");
ofstream ofile("a2.txt");
int T;
ifile >> T;
for(int i = 1; i <= T; i++)
{
int n;
ifile >> n;
for(int j = 0; j < n; j++)
ifile >> str[j];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
if(str[i][j] != '*')
{
int count = 0;
for(int ii = i - 1; ii <= i + 1; ii++)
for(int jj =j - 1; jj <= j + 1; jj++)
{
if(ii >= 0 && ii < n && jj >= 0 && jj < n && str[ii][jj] == '*')
count++;
}
num[i][j] = count;
}
else
num[i][j] = -1;
visit[i][j] = false;
}
int count = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
if(num[i][j] == 0 && !visit[i][j])
{
dfs(i, j, n);
count++;
}
}
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
if(str[i][j] != '*' && !visit[i][j])
count++;
}
ofile << "Case #" << i << ": " << count << endl;
}
return 0;
}
Google2015校招在线測试题1----扫雷最少点击次数的更多相关文章
- google校招在线測试题---2048
先附代码:(简单地说就是给出一个矩阵代表2048游戏的一个状态以及一个方向,输出往这个方向移动之后的矩阵) #include<iostream> #include<fstream&g ...
- 【hihocoder】1237 : Farthest Point 微软2016校招在线笔试题
题目:给定一个圆,要你求出一个在里面或者在边上的整数点,使得这个点到原点的距离最大,如果有多个相同,输出x最大,再输出y最大. 思路:对于一个圆,里面整点个数的x是能确定的.你找到x的上下界就可以了. ...
- (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)
刚才把最后的10道题又看了下.也发上来吧. 以下给出试题.和我对题目的一些理解 前10道题地址 (各个公司面试原题)在线做了一套CC++综合測试题.也来測一下你的水平吧(一) 11.设已经有A,B,C ...
- 当当网-前端project师測试题
前端project师測试题(笔试时间20分钟.面试时间20分钟) 一.笔试 1.基础问题 (1)前端页面有哪三层构成,各自是什么? ...
- jsfiddle在线測试Html、CSS、JavaScript——http://jsfiddle.net/
jsfiddle在线測试Html.CSS.JavaScript,并展示測试结果 1.选择jQuery1.9.1 2.选择jQuery UI 1.9.2 3.Html <ul id="n ...
- 阿里腾讯校招Java面试题总结及答案
阿里校招java面试题汇总 1.HashMap和HashTable的区别,及其实现原理. Hashtable继承自Dictionary类,而HashMap是Java1.2引进的,继承自Abstract ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- 2015网易校招Java开发工程师(技术架构)在线笔试题
1. 程序和进程的本质区别是? A.在外存和内存存储 B.非顺序和顺序执行机器指令 C.独占使用和分时使用计算机资源 D.静态和动态特征 参考答案分析: 进程与应用程序的区别: 进程(Process ...
- 2015年网易校招Java开发工程师(技术架构)在线笔试题
1. 程序和进程的本质区别是? A.在外存和内存存储 B.非顺序和顺序执行机器指令 C.独占使用和分时使用计算机资源 D.静态和动态特征 参考答案分析: 进程与应用程序的区别: 进程(Process ...
随机推荐
- HTML form without CSRF protection,HTML表单没有CSRF保护
HTML form without CSRF protection =HTML表单没有CSRF保护 CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是Cross Site Request For ...
- Array与NSArray关系
NSArray与Array之间的关系如同NSString与String之间的关系,NSArray是类类型,而Array是结构体类型,一个是引用类型,一个是值类型,它们是怎样实现无缝转换的呢?Swift ...
- RocketMQ学习笔记(15)----RocketMQ的消息模式
在前面学习ActiveMQ时,看到ActiveMQ可以是队列消息模式,也可以是订阅发布模式. 同样,在RocketMQ中,也存在两种消息模式,即是集群消费模式和广播消费模式. 1. 集群消费模式 跟A ...
- 删除链表中重复的结点_java
package algorithms; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { th ...
- string 字符串--------redis
APPEND 语法:APPEND KEY VALUE 如果key已经存在并且是一个字符串,append 命令将value追加到key原来的值的末尾. 如果key不存在,append就简单地将给定key ...
- EasyUI_datagrid
案例一丶jquery.easyui.min.js:10631 Uncaught TypeError: this.renderEmptyRow is not a function 解决方法:datagr ...
- [HNOI]2003 消防局的建立
消防局的建立 本题地址:http://www.luogu.org/problem/show?pid=2279 题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料 ...
- python OOP(2)
调用方法有两种形式 实例调用 直接调用后序参数即可 类调用 调用时需要先加上实例 示例 class test1: def pt(self,txt): #定义函数 test1.txt=txt print ...
- Re0:DP学习之路 01背包如何打印路径?
伪代码 用二维数组记录,如果出现可以转移的dp那么记录bk[当前体积][装的物品]=1 输出的时候倒推,如果存在连通的边那么输出并且总共的体积减去输出的体积 代码(uva-624,目前wa不明所以,网 ...
- 剑指offer---圆圈中最后剩下的数
题目:圆圈中最后剩下的数 要求:0,1,2...n-1 共n个数排成一个圆圈,从数字0开始,每次删除第m个元素,求这个圆圈里面剩下的最后一个元素 如 n=5, m=3 的情况:0, 1, 2, 3, ...