链接:https://www.nowcoder.net/acm/contest/76/A
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
随着海上运输石油泄漏的问题,一个新的有利可图的行业正在诞生,那就是撇油行业。如今,在墨西哥湾漂浮的大量石油,吸引了许多商人的目光。这些商人们有一种特殊的飞机,可以一瓢略过整个海面20米乘10米这么大的长方形。(上下相邻或者左右相邻的格子,不能斜着来)当然,这要求一瓢撇过去的全部是油,如果一瓢里面有油有水的话,那就毫无意义了,资源完全无法利用。现在,商人想要知道,在这片区域中,他可以最多得到多少瓢油。
地图是一个N×N的网络,每个格子表示10m×10m的正方形区域,每个区域都被标示上了是油还是水
输入描述:
测试输入包含多条测试数据
测试数据的第一行给出了测试数据的数目T(T<75)
每个测试样例都用数字N(N<50)来表示地图区域的大小,接下来N行,每行都有N个字符,其中符号’.’表示海面、符号’#’表示油面。
输出描述:
输出格式如下“Case X: M”(X从1开始),M是商人可以最多得到的油量。
示例1
输入
1 6 ...... .##... ...... .#..#. .#..## ......
输出
Case 1: 3
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<stdlib.h> 5 #include<limits.h> 6 #include<queue> 7 #include<cmath> 8 #include<algorithm> 9 using namespace std; 10 #define maxn 2505 11 char str[maxn][maxn]; 12 int ans[maxn]; 13 int map[maxn][maxn]; 14 int a[maxn], b[maxn]; 15 int n; 16 int v[maxn]; 17 int dfs(int x) 18 { 19 for (int i = 1; i <= n * n; i++) 20 { 21 if (map[x][i] && !ans[i]) 22 { 23 ans[i] = 1; 24 if (!v[i] || dfs(v[i])) 25 { 26 v[i] = x; 27 return 1; 28 } 29 } 30 } 31 return 0; 32 } 33 int main() 34 { 35 int i, j, T, cases = 0; 36 scanf_s("%d", &T); 37 while (T--) 38 { 39 int x; 40 scanf_s("%d", &n); 41 memset(v, 0, sizeof(v)); 42 memset(map, 0, sizeof(map)); 43 memset(str, '