查找一个只包含0和1的矩阵中每行最长的连续1序列。
输入说明
输入第一行为两个整数m和n(0<=m,n<=100)表示二维数组行数和列数,其后为m行数据,每行n个整数(0或1),输入数据中不会出现同一行有两个最长1序列的情况。
输出说明
找出每一行最长的连续1序列,输出其起始位置(从0开始计算)和结束位置(从0开始计算),如果这一行没有1则输出两个-1,然后换行。
查找一个只包含0和1的矩阵中每行最长的连续1序列。
输入说明
输入第一行为两个整数m和n(0<=m,n<=100)表示二维数组行数和列数,其后为m行数据,每行n个整数(0或1),输入数据中不会出现同一行有两个最长1序列的情况。
输出说明
找出每一行最长的连续1序列,输出其起始位置(从0开始计算)和结束位置(从0开始计算),如果这一行没有1则输出两个-1,然后换行。
#include <stdio.h>
#include <malloc.h>
int main()
{
int m, n;
scanf("%d %d", &m, &n);
int i, j;
int** matrix = (int**)malloc(sizeof(int*) * m);
for (i = 0; i < m; ++i)
{
matrix[i] = (int*)malloc(sizeof(int) * (n+1));
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &matrix[i][j]);
}
matrix[i][j] = 0;
}
for (i = 0; i < m; i++)
{
int start = -1, end = -1, max = 0, res_x = -1, res_y = -1;
for (j = 0; j < n + 1; j++)
{
if (start == -1 && matrix[i][j] == 1)
{
start = j;
end = j;
}
if (start != -1 && matrix[i][j] == 1)
{
end = j;
}
if (start != -1 && matrix[i][j] == 0)
{
if (end - start + 1 > max)
{
max = end - start + 1;
res_x = start;
res_y = end;
}
start = -1;
end = -1;
}
}
printf("%d %d\n", res_x, res_y);
}
}