3 / 8

()(15分,每空3分)
【说明】
  假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。下面用二维数组a[N][N]模拟剧场中的座位,a[i][j]等于0表示第i排第j列(0≤I , j≤N-1)的票尚未售出。
  函数int Find ( int a[][N] , int R , int *row , int *col )的功能是:在部分票已售出的情况下,找出剧场中的R*R个空座位,要求这些座位的排列形成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方形左上角的行、列号;若未找到,返回0;
  例如,一个7×7个座位的剧场如下图(a)所示,已售出部分座位的剧场如下图(b)所示,图中阴影部分表示已售出的座位,从图(b)中找出3×3正方形空座位如图(c)中斜线区所示。
 


【函数】
  int Find ( int a[][N] , int R , int *row , int *col )
 {  int i,j,k,c,t; int FOUND = 0;
    for ( i=0 ; !FOUND && i     __(1)__ ;
   while ( j     for ( k=0; ___(2)___ && a[i][j+k] = = 0; k++);/* 查找第i排连续的R个空座位 */
   if ( k >=R ){ /* 查找第i排连续的R个空座位 */
    for ( c=0 ; c < R ; c++ ) { /* 查找其余的R*(R-1)个座位 */
    for ( t = 1 ; t < R ; t++ )
   if (a[ __(3)__ ] [j+c] !=0 ) break;
  if ( t   } /* for */
 if ( ___(4)___ ) FOUND =1;
 } /* if */
  ___(5)___ ;
 } /* while */
 } /* for i */
 if ( FOUND ) {
    *row = i-1 ; *col = j-1; /* 计算正方形区域的左上角坐标*/
   return 1;
   }
 return 0;
 }