二维数组— 0-1矩阵(C语言)

题目
查找一个只包含0和1的矩阵中每行最长的连续1序列。
找出每一行最长的连续1序列,输出其起始位置(从0开始计算)和结束位置(从0开始计算),如果这一行没有1则输出两个-1,然后换行。

对于连续的判断我一直不是很会做。。这次也让我好好地了解了一下。
代码如下:

#include

int main() {
    int i, j, m, n, a[100][100];
    scanf("%d %d", &m, &n);
    for (i = 0; i < m; i++)                   //先输入矩阵
    {
        for (j = 0; j < n; j++)
            scanf("%d", &a[i][j]);
    }
    for (i = 0; i < m; i++) {
        int count = 0, max = 0, location = 0, sign = 0;    //注意这些初始化的位置
        for (j = 0; j < n; j++) {
            if (a[i][j] == 1) {
                count++;
                sign = 1;         //标记变量,有1就是sign = 1
                if (j + 1 < n)        //现在不是最后一个元素
                {
                    if (a[i][j + 1] == 0 && count > max)     //下一个为0,需比较是否为最长
                    {
                        max = count;
                        location = j;
                        count = 0;              //因为1的连续结束了,所以count重赋值为0
                    }
                } else {     //现在是最后一个元素
                    if (count > max)     //需比较是否为最长
                    {
                        max = count;
                        location = j;
                        count = 0;              //因为1的连续结束了,所以count重赋值为0
                    }
                }
            }
        }
        if (sign) {
            printf("%d %d\n", location - max + 1, location);
        } else
            puts("-1 -1");
    }
    return 0;
}

欢迎交流探讨。
谢谢。

你可能感兴趣的:(C)