油田合并

TimeLimit: 1 Second   MemoryLimit: 32 Megabyte

Totalsubmit: 603   Accepted: 166

Description

某石油公司发现了一个油田。该油田由n*m个单元组成的矩形,有些单元里有石油,有些则没有。单元油田可以通过上,下,左或右连通。在一个单元油田里架设一台采油机,它可以把和该单元油田相连的单元油田的石油采完。该公司想知道最少需要架设几台采油机能把所有的石油采完?

Input

先输入2个正整数n,m(1<=n,m<=50)。接着有n行,每行有m个字符。‘@‘表示该单元有石油,‘*‘则表示该单元没有石油。 输入到文件结束。

Output

对于每组测试,输出最少需要架设几台采油机。

Sample Input

2 2

@*

*@

2 2

@@

@@

Sample Output

2 1

BFS:

 1 /*简单BFS搜索*/
 2 #include<cstdio>
 3  #include<queue>
 4  #include<cstring>
 5
 6
 7 using namespace std;
 8
 9 struct Q{
10         int x,y;
11  };
12
13 int dir[4][2]={1,0,-1,0,0,1,0,-1};
14  char map[105][105];
15  char str[105];
16
17 void bfs(int a,int b,int n,int m){
18     int i,x,y;
19     queue<Q> q;
20     Q now,temp;
21     temp.x=a;
22     temp.y=b;
23     map[a][b]=‘*‘;
24     q.push(temp);
25     while(!q.empty()){
26        now=q.front();
27        q.pop();
28        for(i=0;i<4;i++){
29            x=now.x+dir[i][0];
30            y=now.y+dir[i][1];
31            if(x<1||x>n||y<1||y>m||map[x][y]==‘*‘)
32                continue;
33            temp.x=x;
34            temp.y=y;
35            map[x][y]=‘*‘;
36            q.push(temp);
37        }
38     }
39  }
40
41 int main(){
42      int i,j,n,m,count;
43      while(~scanf("%d%d",&n,&m)&&m){
44        count=0;
45        for(i=1;i<=n;i++){
46          scanf("%s",str);
47          for(j=1;j<=m;j++)
48          map[i][j]=str[j-1];
49        }
50        for(i=1;i<=n;i++)
51          for(j=1;j<=m;j++)
52            if(map[i][j]==‘@‘){
53               bfs(i,j,n,m);
54               count++;
55            }
56        printf("%d\n",count);
57     }
58     return 0;
59  }

DFS:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int N=55;
 5 int n,m;
 6 char s[N][N];
 7 int vist[N][N];
 8 int dir[][2]={-1,0,0,1,1,0,0,-1};//代表上下左右四个方向
 9 void dfs(int x,int y)
10 {
11     vist[x][y]=1;
12     for(int d=0;d<4;++d)
13     {
14         int nx=x+dir[d][0];
15         int ny=y+dir[d][1];
16         if(nx<=n&&s[nx][ny]==‘@‘&&vist[nx][ny]==0)
17         {
18             dfs(nx,ny);
19         }
20     }
21 }
22 int main()
23 {
24     while(cin>>n>>m)
25     {
26         int sum=0;
27         memset(vist,0,sizeof(vist));
28         for(int i=1;i<=n;++i)
29         {
30             for(int j=1;j<=m;++j)
31             {
32                 cin>>s[i][j];
33             }
34         }
35         for(int i=1;i<=n;++i)
36         {
37             for(int j=1;j<=m;++j)
38             {
39                 if(vist[i][j]==0&&s[i][j]==‘@‘)
40                 {
41                     ++sum;
42                     dfs(i,j);
43                 }
44             }
45         }
46         cout<<sum<<endl;
47     }
48     return 0;
49 }

时间: 2024-10-18 08:39:41

油田合并的相关文章

合并油田

#include<stdio.h> #include<string.h> #define N 111 char str[N][N]; int a,b; int dir[8][2]= {1,1,1,-1,-1,1,-1,-1,0,1,0,-1,1,0,-1,0}; //因为是上下左右和斜对角,所以是八个方向. void fbs(int x,int y) { int i,n,m; for(i=0; i<8; i++) { n=x+dir[i][0]; m=y+dir[i][1];

C#中使用ffmpeg合并视频

首先将最新的ffmpeg.exe放到debug路径下,下载地址 http://www.ffmpeg.org/download.html 然后调用此方法 public void CombineMp4WithoutTxt(string StrMP4A, string StrMP4B, string StrOutMp4Path) { Process p = new Process();//建立外部调用线程 p.StartInfo.FileName = System.Windows.Forms.Appl

合并多个文本文件方法

原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/47055589 把多个文本文件合并的小方法 怎样高速合并多个文本(如txt)文件呢? 这个事实上非常easy. (1).WIN下合并多个txt文件 实验: 建立多个txt文本文件.例如以下: 当中内容分别为: 1:a 2:b 3:c 4:d 现要把这四个txt文件合成为一个".sql"文件. 合并后的效果例如

7620:区间合并

7620:区间合并 总时间限制: 1000ms 内存限制: 65536kB 描述 给定 n 个闭区间 [ai; bi],其中i=1,2,...,n.任意两个相邻或相交的闭区间可以合并为一个闭区间.例如,[1;2] 和 [2;3] 可以合并为 [1;3],[1;3] 和 [2;4] 可以合并为 [1;4],但是[1;2] 和 [3;4] 不可以合并. 我们的任务是判断这些区间是否可以最终合并为一个闭区间,如果可以,将这个闭区间输出,否则输出no. 输入 第一行为一个整数n,3 ≤ n ≤ 5000

洛谷P1090 合并果子

题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最

合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友_python

这时候还需要把各个工作表合并到一起来形成一个汇总表.这时候比较麻烦也比较容易出错,因为各个表的学号不一定都是一致的.对齐的.因为可能会有人缺考,有人会考号涂错等等.特奉献以下代码,用于合并学生成绩表或者其它类似的表都可以.本代码特点在于不需要使用SQL或者Access等大头软件,只需要Excel就可以执行,非常方便,速度也不慢.转载请勿清除广告. 没有合适的局域网管理软件吗?你的网管工具够灵活够高效吗?看看这个network management software. ' ============

mysql分组查询时,讲多个值合并在一行显示

mysql根据字段进行分组查询时,相同字段的数据,只会显示一个,如果要想让这个字段的所有数据,显示在一行里,可以在查询时用GROUP_CONTAT函数,默认数据合并以逗号,分开

利用python合并两个文件

1格式如下 在做利用zabbix的api来批量添加主机的时候,需要处理ip和hostname,在借用别人写的py程序的基础上,自己有改装了以下脚本,为自己使用.需要时ip和hostname为一个统一格式. $ cat ip.txt 1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4 $ cat hostname.txt tx-1 tx-2 tx-3 tx-4 最后需要合并为如下格式 1 tx-1,1.1.1.1 2 tx-2,2.2.2.2 3 tx-3,3.3.3.3 4 tx-4

RandomAccessFile拆分合并文件

import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.io.SequenceInputStream; import java.util.Vector; public class RandonFileAccessTest { public static void main(String[]