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