二维数组求序列数最多的位置

img

如图,查找一个只包含01的矩阵中每列最长的连续1序列,输入说明输出说明样例如图

//for example
int main() {
    int m,n,s,e,*v,i,j,(*p)[2];
    scanf(“%d%d”, &m, &n);
    p=((int*)[2])malloc(sizeof(int[2])*m);//保存每行的查找结果
    v=(int*)malloc(sizeof(int)*n);//保存每行输入信息
    for(i=0;i<m;i++) {//按行循环
        s=e=p[i][0]=p[i][1]=-1;//初始化
        for(j=0;j<n;j++) 
            scanf”%d”, &v[j]);//接收每行输入数据

        for(j=0;j<n;j++) {//按列循环
            if(v[j]==1 && s==-1) s=e=j; //初次次遇到1,记录位置
            else if (v[j]==1) e++;//初次以外遇到1,累加结束位置
            if (v[j]!=1 || j==n-1) {//遇到1以外或者最后一列
                 if(e-s>p[i][1]-p[i][0] || p[i][0]==-1) {//判断找到的位置是否大于保存的结果,大于则交换,并初始化位置
                    p[i][0]=s;
                    p[i][1]=e;
                    s=e=-1;
                 }
             }
        }
    } 
    for(i=0;i<m;i++) //打印结果
        printf(“%d,%d\n”, p[i][0], p[i][1]);

    free(p); //释放内存
    free(v);
    return 0;
}