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 }