华师一附中OI组
标题:
P1596 [USACO10OCT]Lake Counting S
[打印本页]
作者:
admin
时间:
2021-5-17 16:33
标题:
P1596 [USACO10OCT]Lake Counting S
https://www.luogu.com.cn/problem/P1596
题目描述
由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。我们用一个NxM(1<=N<=100;1<=M<=100)网格图表示。每个网格中有水('W') 或是旱地('.')。一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。约翰想弄清楚他的田地已经形成了多少水坑。给出约翰田地的示意图,确定当中有多少水坑。
输入格式
第1行:两个空格隔开的整数:N 和 M 第2行到第N+1行:每行M个字符,每个字符是'W'或'.',它们表示网格图中的一排。字符之间没有空格。
输出格式
一行:水坑的数量
输入输出样例
输入 #1复制
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
复制代码
输出 #1复制
3
作者:
admin
时间:
2021-5-17 16:36
和1451几乎一样,改动8个方向就是。一次AC。
#include<iostream>
using namespace std;
const int mm=110;
int m,n,x;
int a[mm][mm]; ///原始棋盘
int v[mm][mm]; ///是否被访问
int dr[]= {0,+1,+1,+0,-1,-1,-1,+0,+1};
int dc[]= {0,+0,+1,+1,+1,+0,-1,-1,-1};
void check() ///检查a数组和v数组
{
for (int r=1; r<=m; r++,cout<<endl)
for (int c=1; c<=n; c++) cout<<a[r][c];
for (int r=1; r<=m; r++,cout<<endl)
for (int c=1; c<=n; c++) cout<<v[r][c];
}
void dfs(int r ,int c,int x) ///从rc处开始给区域染色为x
{
a[r][c]=x,v[r][c]=1;
///cout<<r<<' '<<c<<endl;check();int y;cin>>y;
for (int i=1; i<=8; i++)
{
int tr=r+dr[i],tc=c+dc[i];
if (a[tr][tc]!=0 && v[tr][tc]==0)dfs(tr,tc,x);
}
}
int main()
{
cin>>m>>n;
for (int r=1; r<=m; r++)
for (int c=1; c<=n; c++)
{
char ch;cin>>ch;
a[r][c]=(ch=='W');
}
for (int r=1; r<=m; r++)
for (int c=1; c<=n; c++)
if (a[r][c]!=0 && v[r][c]==0) dfs(r,c,++x);
//check();
cout<<x;
return 0;
}
/*
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
*/
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2