fzu 1920 Left Mouse Button(dfs)

原创 2013年12月04日 23:38:55

题目链接:fzu 1920 Left Mouse Button


题目大意:给出一张图,数字代表说周围8个位置有多少个地雷’@‘,然后根据扫雷的规则,点在0的位置话,会将一片连在一起的0全部显示出来,外加0的周围一圈。问说最少要多少步可以点完所有没有泪的位置。


解题思路:遍历图,碰到’0‘的时候用dfs搜索将一片整体的全标记起来。然后最后在计算没有标记且不是雷的位置的个数,加上前面调用dfs的次数就是答案了。


#include <stdio.h>
#include <string.h>

const int N = 10;
const int d[][2] = { {0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, -1}, {1, 1}, {-1, -1}, {-1, 1} };

int n, v[N][N];
char g[N][N];

void init() {
	scanf("%d", &n);

	for (int i = 0; i < n; i++)
		scanf("%s", g[i]);
	memset(v, 0, sizeof(v));
}

void dfs(int x, int y) {
	v[x][y] = 1;

	if (g[x][y] != '0') return;

	for (int i = 0; i < 8; i++) {
		int p = x + d[i][0], q = y + d[i][1];
		if (p < 0 || p >= n) continue;
		if (q < 0 || q >= n) continue;

		if ( !v[p][q] )
			dfs(p, q);
	}
}

int solve() {

	int ans = 0;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if ( !v[i][j] && g[i][j] == '0')
				dfs(i, j), ans++;
		}
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if ( !v[i][j] && g[i][j] != '@') ans++;
		}
	}

	return ans;
}

int main () {
	int cas;
	scanf("%d", &cas);
	for (int i = 1; i <= cas; i++) {
		init();
		printf("Case %d: %d\n", i, solve() );
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

FZU Problem 1920 Left Mouse Button[dfs ||bfs,扫雷游戏]

题目链接:http://acm.fzu.edu.cn/problem.php?pid=1920 题目的意思,就是典型的扫雷游戏。。...

#730 – 使用QueryContinueDrag 事件(Use QueryContinueDrag Event to Know When Mouse Button State Changes)

原文地址:https://wpf.2000things.com/2013/01/09/730-use-querycontinuedrag-event-to-know-when-mouse-button...

fzu 2210 攻占计划 图论 dfs

fzu月赛,图论搜索。

(福大2015年3月月赛)FZU 2185 树的路径覆盖 (DFS)

题目地址:FZU 2185 允许重复覆盖的值比较好求,一条路径覆盖两个叶子节点,所以答案是(叶子结点数+1)/2。至于不允许重复覆盖的,我第一次想的是叶子节点数-1,因为先让第一条覆...

FZU-1924+判断环/DFS/BFS

dfs: /* */ #include #include #include #include #include #include #include #include #include #inclu...
  • xxx0624
  • xxx0624
  • 2013年09月04日 00:03
  • 916

FZU Problem 2107 Hua Rong Dao (打表 dfs)

FZU Problem 2107 Hua Rong Dao (打表 dfs)

Fzu 2207 以撒的结合【思维+Dfs序】好题!好题!

Problem 2207 以撒的结合 Accept: 68    Submit: 219 Time Limit: 1000 mSec    Memory Limit : 32768 KB ...

FZU - 1205 小鼠迷宫问题 (bfs+dfs)

题目大意: 在一个迷宫内输出位置a到位置b的最短距离,以及一共有多少种不同的最短路径数。 分析: 利用bfs可以计算出最短路径的距离(即移动次数),然后用dfs计算出等于(移动次数)时有多少...

第八届福建省大学生程序设计竞赛 FZU 2277 Change (dfs序+树状数组)

题目原文:  Problem 2277 Change Accept: 60    Submit: 354 Time Limit: 2000 mSec    Memory Limit ...
  • wchhlbt
  • wchhlbt
  • 2017年07月24日 16:27
  • 203

FZU 2277 线段树+DFS序

题意对一棵树进行操作,1 v x k代表对根节点v加x,对v的子节点加x-k,对孙子节点加v-2k。2 v代表查询节点V的值。题解其实是一个很简单的线段树,对于一次增加操作,节点x增加的值其实就是x-...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fzu 1920 Left Mouse Button(dfs)
举报原因:
原因补充:

(最多只允许输入30个字)