标签:
Red and Black13
//上下左右搜索查看与起点能连通的个数
#include <stdio.h> #include <iostream> using namespace std; char c[21][21]; int vis[21][21]; int n,m; void dfs(int x,int y) { if(x<0||y<0||x>=m||y>=n) return; if(vis[x][y]==1) return; if(c[x][y]=='.'||c[x][y]=='@') //起点也算一个 { vis[x][y]=1; //连通的标记为1 dfs(x+1,y); dfs(x-1,y); dfs(x,y+1); dfs(x,y-1); } } int main() { while(~scanf("%d%d",&n,&m)&&(n+m)) { for(int i=0;i<21;i++) { for(int k=0;k<21;k++) { c[i][k]=0; vis[i][k]=0; } } int x,y; for(int i=0;i<m;i++) { for(int k=0;k<n;k++) { cin>>c[i][k]; if(c[i][k]=='@') //记录起点 { x=i; y=k; } } } dfs(x,y); int cnt=0; for(int i=0;i<m;i++) //遍历一遍看看有几个标记的 for(int k=0;k<n;k++) if(vis[i][k]==1) cnt++; printf("%d\n",cnt); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a73265/article/details/46835323