HOJ 1797 -- Red and Black

HOJ 1797 -- Red and Black
简单搜索,给出一个由'.' , '#' , '@'组成的矩阵,输出从@开始能到达的所有'.'的数目(包括'@')
 1  #include  < stdio.h >
 2  #include  < stack >
 3 
 4  using   namespace  std;
 5 
 6  struct  xx
 7  {
 8       int  x,y;
 9  };
10  int  main()
11  {
12       char   in [ 25 ][ 25 ];
13       int  i,j,si,sj;
14       int  r,c,count,flag[ 25 ][ 25 ],dx[ 4 =  { 0 , 0 , 1 , - 1 },dy[ 4 =  { 1 , - 1 , 0 , 0 };
15      
16       while (scanf( " %d%d " , & c, & r)  ==   2 )
17      {
18           if ( ! &&   ! c)  break ;
19          memset( in , 0 , sizeof ( in ));
20          memset(flag, 0 , sizeof (flag));
21          
22           for (i  =   0 ; i  <=  c; i ++
23          {
24               in [ 0 ][i]  =   ' # ' ;
25               in [r  +   1 ][i]  =   ' # ' ;
26          }
27           for (i  =   0 ; i  <=  r; i ++
28          {
29               in [i][ 0 =   ' # ' ;
30               in [i][c  +   1 =   ' # ' ;
31          }
32           for (i  =   1 ; i  <=  r; i ++ )
33               for (j  =   1 ; j  <=  c; j ++ )
34              {
35                  scanf( "  %c " , & in [i][j]);
36                   if ( in [i][j]  ==   ' @ ' )
37                  {
38                      si  =  i;
39                      sj  =  j;
40                      flag[i][j]  =   1 ;
41                  }
42                   else   if ( in [i][j]  ==   ' . ' ) flag[i][j]  =   1 ;
43              }
44          stack  < xx >  huhupao;
45          xx temp;
46          temp.x  =  si;
47          temp.y  =  sj;
48          huhupao.push(temp);
49          count  =   0 ;
50          flag[si][sj]  =   0 ;
51           while (huhupao.empty()  ==   false )
52          {
53              xx t  =  huhupao.top();
54              huhupao.pop();
55              count ++ ;
56               for (i  =   0 ; i  <   4 ; i ++ )
57                   if ( in [t.x  +  dx[i]][t.y  +  dy[i]]  ==   ' . '   &&  flag[t.x  +  dx[i]][t.y  +  dy[i]])
58                  {
59                      temp.x  =  t.x  +  dx[i];
60                      temp.y  =  t.y  +  dy[i];
61                      huhupao.push(temp);
62                      flag[temp.x][temp.y]  =   0 ;
63                  }
64          }
65          printf( " %d\n " ,count);
66      }
67       return   0 ;
68  }

你可能感兴趣的:(HOJ 1797 -- Red and Black)