1. #include<iostream> 
  2. using namespace std; 
  3. namespace A{ 
  4. int map[101][101] = {0}; 
  5. int visited[101][101] = {0}; 
  6. int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}}; 
  7. int len,wid; 
  8. int top = 0,end = 0; 
  9. struct point{ 
  10.     int x; 
  11.     int y; 
  12.     int com; 
  13. }que[10001]; 
  14.  
  15. bool Juge(int x,int y){ 
  16.     if(x>=0 && y>=0 && x<=(len-1) && y<=(wid-1)) 
  17.         return true
  18.     return false
  19.  
  20. //维护一个队列,在访问一个节点时,将与该节点连接的点加入队列的末尾, 
  21. //如果队列不为空则一直while下去,直到符合if条件Break结束 
  22. void BFS(){ 
  23.      
  24.     int m,n; 
  25.     que[0].x = 0; 
  26.     que[0].y = 0; 
  27.     que[0].com = 0; 
  28.     end++; 
  29.     while(top != end){ 
  30.  
  31.         m = que[top].x; 
  32.         n = que[top].y; 
  33.          top++; 
  34.          if(m == len-1 && n == wid-1) 
  35.             break
  36.  
  37.         for(int i=0;i<3; i++){ 
  38.             if(Juge(m+dir[i][0],n+dir[i][1]) 
  39.                && visited[m+dir[i][0]][m+dir[i][1]] == 0 
  40.                && map[m+dir[i][0]][m+dir[i][1]] == 0){ 
  41.                 visited[m+dir[i][0]][m+dir[i][1]] = 1; 
  42.                 que[end].x = m+dir[i][0]; 
  43.                 que[end].y = m+dir[i][1]; 
  44.                 que[end].com = top; 
  45.                 end++; 
  46.  
  47.             } 
  48.         } 
  49.  
  50.     } 
  51. using namespace A; 
  52. int main(){ 
  53.     cin>>len>>wid; 
  54.     for(int i=0; i<len;i++) 
  55.         for(int j = 0;j<wid;j++) 
  56.             cin>>map[i][j]; 
  57.  
  58.     BFS(); 
  59.     cout<<end<<endl; 
  60.     system("pause"); 
  61.  
  62. return 0;