题意:求给定起点的最小连接块的组成个数
分析:简单的DFS
收获:加强了DFS的理解(以后要看清题意,这个竟然先输入列数,因为这个卡了好长时间。。。。。)
AC代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
char s[1000][1000];
int m,n;
int c,d;
int sum=0 ;
void dfs(int a,int b)
{
// if(a<0||a>=m||b<0||b>=m) return ;
s[a][b]='#';
if(a-1>=0)
{
if(s[a-1][b]=='.')
{
sum++;
// cout <<a<< " "<<b+1<< endl;
dfs(a-1,b);
}
}
if(b-1>=0)
{
if(s[a][b-1]=='.')
{
sum+=1;
// cout <<a<< " "<<b+1<< endl;
dfs(a,b-1);
}
}
if(a+1<m)
{
if(s[a+1][b]=='.')
{
sum+=1;
// cout <<a<< " "<<b+1<< endl;
dfs(a+1,b);
}
}
if(b+1<n)
{
if(s[a][b+1]=='.')
{
sum++;
// cout <<a<< " "<<b+1<< endl;
dfs(a,b+1);
}
}
return ;
}
int main()
{
while(cin >> n >> m&&n&&m)
{
sum=0;
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cin >> s[i][j];
if(s[i][j]=='@')
{
c =i;
d =j;
}
}
}
// cout << c << " " << d;
dfs(c,d);
cout << sum+1 <<endl;
}
}