//通过dfs/bfs访问可以到达的所有结点
//并统计总结点个数
#include<iostream>
#include<cstring>
using namespace std;
int x[]={-1,1,0,0};
int y[]={0,0,-1,1};
int n,m,visited[21][21],cnt;
char map[25][25];
void dfs(int x1,int y1)
{
for(int k=0;k<4;k++)
{
int x2=x1+x[k];
int y2=y1+y[k];
if(x2>=0&&x2<n&&y2>=0&&y2<m&&map[x2][y2]=='.'&&!visited[x2][y2])
{
cnt++;
visited[x2][y2]=1;
dfs(x2,y2);
}
}
}
int main()
{
int x1,y1,i,j;
while(cin>>m>>n&&n&&m)
{
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{x1=i;y1=j;}
}
cnt=1;memset(visited,0,sizeof(visited));
dfs(x1,y1);
cout<<cnt<<endl;
}
return 0;
}
zoj--2165
最新推荐文章于 2019-01-17 15:15:19 发布
本文介绍了一个使用深度优先搜索(DFS)进行图遍历的示例程序,演示了如何从指定起点开始遍历所有可达节点,并统计这些节点的数量。
207

被折叠的 条评论
为什么被折叠?



