HDU 1312 Red and Black(BFS)

题目链接

再刷一个BFS。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 char p[50][50];
 5 int k[50][50],o1[10000],o2[10000];
 6 int main()
 7 {
 8     int i,j,a,w,h,start,end;
 9     int j1[5] = {1,-1,0,0},j2[5] = {0,0,1,-1};
10     while(scanf("%d%d%*c",&w,&h)!=EOF)
11     {
12         start = end = 1;
13         memset(k,0,sizeof(k));
14         if(w == 0 || h == 0)
15             break;
16         for(i = 0; i <= h-1; i ++)
17             gets(p[i]);
18         for(i = 0; i <= h-1; i ++)
19             for(j = 0; j <= w-1; j ++)
20             {
21                 if(p[i][j] =='@')
22                 {
23                     o1[1] = i;
24                     o2[1] = j;
25                     k[i][j] = 1;
26                 }
27                 if(p[i][j] =='#')
28                 {
29                     k[i][j] = -1;
30                 }
31             }
32         while(start <= end)
33         {
34             j = 1;
35             for(i = start; i <= end; i ++)
36             {
37                 for(a = 0; a <=3; a ++)
38                 {
39                     if(o1[i]+j1[a] <= h-1 && o1[i]+j1[a]>=0 &&o2[i]+j2[a]>=0&&o2[i]+j2[a]<=w-1)
40                     {
41                         if(k[o1[i]+j1[a]][o2[i]+j2[a]] == 0)
42                         {
43                             o1[end+j] = o1[i]+j1[a];
44                             o2[end+j] = o2[i]+j2[a];
45                             k[o1[i]+j1[a]][o2[i]+j2[a]] = 1;
46                             j ++;
47                         }
48                     }
49                 }
50             }
51             start = end +1;
52             end = end + j -1;
53         }
54         printf("%d\n",end);
55     }
56     return 0;
57 }

 

posted @ 2012-06-02 15:05  Naix_x  阅读(215)  评论(0编辑  收藏  举报