关于二维数组做参数的问题(附加一题)
【问题描述】 将一个矩形划分成N*M(1 <= N <= 2000,1 <= M <= 2000)个格子,每个格子有被占用和未被占用两种情况。将一个边长为i的正方形放入矩形中,要求正方形区域中不包含被占用的格子,问共有多少种合适的放置方案。
【输入数据和形式】
从标准输入读取一个整数i (1 < i <= min(M,N)),表示正方形的边长。之后读取N行,每行有M个整数,取值为0或1(1表示该格未被占用,0表示该格被占用)。
【输出数据和形式】
将矩形的放置方案数写到标准输出。
【输入样例】
2
1011
1111
1110
1110
【输出样例】
5
我写的...
#include <stdio.h>
#include <string.h>
char str[2000][2000];
int i;
int is_carre(char **str,int k,int m)
{
int e,f;
for (e=k;e<=k+i-1;e++)
for(f=m;f<=m+i-1;f++)
if (str[e][f]=='0')
break;
if(e==i&&f==i)
return 1;
else
return 0;
}
int main()
{
int numl=0,M,N,j=0,total,k,m,num=0; //str[k][m]
char c,a[1000]={'\0'};
scanf("%d",&i);
while ((c=getchar())!=EOF)
{
if(c=='0'||c=='1')
a[j++]=c;
else if (c=='\n')
numl++;
else break;
}
//puts(a);
M=numl; //M行
total=strlen(a);
N=total/numl; //N列
//printf("%d %d",N,total);
for(k=0;k<M;k++)
for(m=0,j=k*N ; m<N,j<=(k+1)*N-1 ; m++,j++)
str[k][m]=a[j]; //至此已经把a[]存成二维数组
if (i<=M&&i<=N)
{
for(k=0;k<=M-i;k++){
for(m=0;m<N-i;m++){
if (is_carre(str,k,m)==1)
num++;
else continue;}}
}
else
printf("ERROR!");
printf("%d",num);
return 0;
}
就是那个is_carre函数像调用二维数组str[][],不知道怎么掉...这个程序运行什么都是0...