2015年西工大计算机考研复试上机 1441.连阴雨问题
问题描述:
因为下雨,地上有很多水,W代表积水,.代表干燥,我们将“相邻”定位为八个方向,相邻的积水构成一个水坑,先输入M,N,再输入一个M行N列字符矩阵,输出互不相邻的水坑个数。
eg.
输入:
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
输出
3
#include <stdio.h>
#include <iostream>
using namespace std;
char map[100][100];//全局变量,表示一个二维字符矩阵
int visited[100][100];//全局变量,为0表示未访问过,1表示访问过
int ans=0;//全局变量,表示当前互不相邻水坑个数
int m,n;//全局变量,m和n
struct{//全局变量,结构体数组,表示八个方位的偏移量
int x;
int y;
}offset[8]={
{-1,-1},
{-1,0},
{-1,1},
{0,-1},
{0,1},
{1,-1},
{1,0},
{1,1}
};
void dfs(int i,int j)//深搜函数,表示对map[i][j]进行考察
{
int x,y,u;//x和y用于暂时保存i和j改变之后的值,以免破坏原有i和j的值,u是循环变量
visited[i][j]=1;//进来就访问,因此置1
for(u=0;u<8;u++)//八个方向遍历
{
x=i+offset[u].x;//x改变
y=j+offset[u].y;//y改变