请教!!!纠正错误
题目要求:一直不去自修室的Roker最近迫于学习压力决定每天都要去自修,鉴于自修室多多,何必与人争挤,所以Rocker要坐在左右一个座位都没人,如果不是第一排,那么他的前面一个座位也没有人的位置上,当然Rocker也可以坐在墙边但前面或左边或右边有座位的话要没有人才可以。Rocker眼力异常好,只要在门口瞟一眼就可以知道哪个位置上有人哪个没有人,但Rocker大脑毕竟不是电脑,可以迅速计算出这间教室有没有符合他要求的位置。
Input
输入有多个case,每个case第一行有一个数n表示自修室的总间数,接下来描述n( n <= 100 )个自修室的座位情况,接下来按照Rocke对于每间自修室,第一行有四个整数 ID Dis R C ( Dis <= 2000000, 5 <= R,C <= 15),分别是教室的门号,教室距离Rocker寝室的距离,座位的行数以及列数。接下来是一个R*C的01矩阵,
0表示该座位没有人,1表示有人。(每间教室ID,Dis互异),Rocker按照距离远近依次找教室自修,去距离寝室最近的一间满足他条件的教室自修。
Output
每个case输出一行,如果Rocker可以自修的教室ID,若无教室符合条件,输出"Bad Luck,Rocker!"
#include<stdio.h>
void main()
{
int n,ID,Dis,R,C,k,t,p,i,j;
int N[15][15];
int M[100]={0};
while(scanf("%d",&n)==1)
{
p=0;
for(k=1;k<=n;k++)
{
scanf("%d %d %d %d",&ID,&Dis,&R,&C);
for(i=0;i<R;i++)
for(j=0;j<C;j++)
scanf("%d",&N[i][j]); /*输入矩阵*/
for(i=1;i<R;i++)
if(N[i][0]=='0'&&N[i][1]=='0'&&N[i-1][0]=='0')
{p++;M[k]=ID;} /*看第一列有没有合适的座位*/
for(i=1;i<R;i++)
if(N[i][C-1]=='0'&&N[i][C-2]=='0'&&N[i-1][C-1]=='0')
{p++;M[k]=ID;} /*看最后一列有没有合适的座位*/
for(j=1;j<C-1;j++)
if(N[0][j]=='0'&&N[0][j-1]=='0'&&N[0][j+1]=='0')
{p++;M[k]=ID;} /*看第一行有没有合适的座位*/
for(i=1;i<R;i++)
for(j=1;j<C-1;j++)
if(N[i][j]=='0'&&N[i][j-1]=='0'&&N[i][j+1]=='0'&&N[i-1][j]=='0')
{p++;M[k]=ID;} /*看除第一列、最后一列、第一行以外,有没有合适的座位*/
if(N[0][0]=='0'&&N[0][1]=='0')
{p++;M[k]=ID;} /*看第一排第一个座位合不合适*/
if(N[0][C-1]=='0'&&N[0][C-2]=='0')
{p++;M[k]=ID;} /*看第一排最后一个座位合不合适*/
}
if(p==0) printf("Bad Luck,Rocker!\n");
else
{for(i=1;i<n;i++)
for(k=1;k<n-i;k++)
if(M[k]>M[k+1])
{t=M[k];M[k]=M[k+1];M[k+1]=t;} /*将M[k]从小到大排序*/
if(M[1]!=0)
printf("%d\n",M[1]);
else
{
while(M[k]==0)
k++;
printf("%d\n",M[k]);
}
}
}
}