Red and Black

杭电1312

View Code
 1 //1312红与黑
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<queue>
 5 using namespace std;
 6 char a[21][21];
 7 int m,n;
 8 int sum;
 9 int d[4][2]={1,0,-1,0,0,1,0,-1};
10 struct node
11 {
12     int x,y;
13 };
14 
15 int judge(int x,int y)
16 {
17     if(x>=0&&x<n&&y>=0&&y<m&&a[x][y]=='.')
18         return 1;
19     else
20         return 0;
21 }
22 
23 void bfs(int x,int y)
24 {
25     int k;
26     
27     queue<node>q;
28     node cur,next;
29     cur.x=x;
30     cur.y=y;
31     q.push(cur);
32     sum++;//将第一个加上;
33     a[x][y]='#';//把第一个置为'#',保证下次不再重复计算
34     while(!q.empty())
35     {
36         cur=q.front();
37         q.pop();
38         
39         for(k=0;k<4;k++)
40         {
41             next.x=x=cur.x+d[k][0];
42             next.y=y=cur.y+d[k][1];
43             if(judge(x,y))//判断四个方位是否为黑色砖
44             {
45                 a[x][y]='#';//满足条件的置为'#'
46                 
47                 q.push(next);
48                 sum++;
49             }
50         }
51         
52     }
53     
54 }
55 
56 int main()
57 {
58     int i,j,t,x,y;
59     while(scanf("%d%d",&m,&n),m!=0||n!=0)
60     {
61         getchar();
62         sum=0;
63         for(i=0;i<n;i++)
64         {
65             scanf("%s",a[i]);
66         }
67         for(i=0;i<n;i++)
68         {
69             for(j=0;j<m;j++)
70             {
71                 if(a[i][j]=='@')
72                 {
73                     x=i;y=j;
74                     break;
75                 }
76             }
77         }
78         bfs(x,y);
79         printf("%d\n",sum);
80     }
81     return 0;
82 }
原文地址:https://www.cnblogs.com/zlyblog/p/2600835.html