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 }

 

你可能感兴趣的:(HDU)