#include <stdio.h>
#include <stdlib.h>
char data[20][20];
typedef struct node{
int x;
int y;
//int step;
}node;
node queue[100000];
int head,tail;
void enqueue(node E){
queue[tail++] = E;
}
node dequeue(){
return queue[head++];
}
int x[4] ={-1,0,1,0};
int y[4] ={0,1,0,-1};
int main(){
int w,h;
freopen("input.txt","r",stdin);
while(1){
node SourcePoint = {0,0};
int count = 0;
scanf("%d %d\n",&w,&h);
if((w == 0)&&(h == 0)){
break;
}
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
scanf("%c ",&data[i][j]);
if(data[i][j] == '@'){
SourcePoint.x = i;
SourcePoint.y = j;
}
}
}
enqueue(SourcePoint);
node CurPoint = {};
node NewPoint = {};
while(head<tail){
//printf("%d %d\n",head,tail);
node CurPoint = dequeue();
for(int i =0;i<4;i++){
NewPoint.x = CurPoint.x + x[i];
NewPoint.y = CurPoint.y + y[i];
if((NewPoint.x>=0)&&(NewPoint.x<h)&&(NewPoint.y>=0)&&(NewPoint.y<w)&&(data[NewPoint.x][NewPoint.y] == '.')){
//NewPoint.step = CurPoint.step+1;
data[NewPoint.x][NewPoint.y] = '@';
enqueue(NewPoint);
}
}
}
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(data[i][j] == '@')
count++;
}
}
printf("%d\n",count);
}
}
POJ 1979 Problem:Red and Black(BFS)
最新推荐文章于 2020-09-19 15:11:15 发布