题目大概意思是要求 @符合所在区域包括他的有多少个点
这道题用广搜来做
从出发的点不断的搜一直搜完整个图就能
得到结果
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
int dir[4][2]={{1,0},{0,1},{-1.0},{0,-1}};
typedef pair<int ,int > PAIR;
int sx,sy,m,n;
int INF;
char maze[21][21];
int save[21][21];
int Max;
void bfs()
{
queue <PAIR> q_ue;
q_ue.push(PAIR(sy,sx));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
save[i][j]=INF;
}
}
save[sy][sx]=0;
while(q_ue.size())
{
PAIR p=q_ue.front();
q_ue.pop();
Max++;
for(int i=0;i<4;i++)
{
int x=p.second+dir[i][0],y=p.first+dir[i][1];
if(x>=0 && x<m &&y>=0 && y<n && save[y][x]==INF && maze[y][x]!='#')
{
q_ue.push(PAIR(y,x));
save[y][x]=save[p.first][p.second]+1;
}
}
}
}
int main()
{
while(1)
{
Max=0;
scanf("%d%d",&m,&n);
if(m==0 && n==0)break;
for(int i=0; i<n; i++)
{
scanf("%s",maze[i]);//得到地图信息
for(int j=0; j<m; j++) //得到地图开始位置和结束位置的值
{
if(maze[i][j]=='@')
{
sx=j;
sy=i;
}
}
}
bfs();
if(Max==1)
cout<<Max<<endl;
else
cout<<Max-1<<endl;
}
return 0;
}