двумерный массив с кодированием длин серий

Я пытаюсь выяснить кодирование длины прогона в двумерном массиве. Я заполнил свою доску размера x размером 0 и 1 случайным образом. Затем моя программа выполняет обход зигзагом (начальная позиция = верхний правый угол), чтобы прочитать 0 и 1 в этом шаблоне. Это работает для меня, как показано ниже. Однако мне нужна помощь в чтении последовательных нулей или единиц и подсчете, сколько раз они появляются каждый раз. Вот пример:

/* n = 4 (i.e. 4 x 4 board)
   1010
   1010
   0001
   1000
 Run-length coding on the zigzag path: 
 (0,2)
 (1,1)
 (0,1)
 (1,2)
 (0,3)
 (1,2)
 (0,4)
 (1,1) */

Вот что у меня есть до сих пор.

   void runLengthCoding()
{
    int flag = 1; // alternate between one and negative one depending on direction.

    //2*maxsize-1 is the number of segments.
    for(int i = 2 * maxSize - 1; i >= 0; i--)   //outer for loop goes through the segments. #of segments
    {    
        //determine the starting element.
        int r, c; 

        if (flag == -1)// if(i%2==1)
        {
            if(i > maxSize)
                r = i - maxSize - 1;
            else 
                r = maxSize - 1; 
        }
        else
        {
            if(i >= maxSize)
                r = 0;
            else 
                r = maxSize - i; 
        }
        c = i - maxSize + r;

        while(r >=0 && r <= maxSize -1 && c >= 0 && c <= maxSize - 1)
        {
            System.out.print(A[r][c] + " ");

            int cnt = 0;

            if (A[r][c] == 0)
            if(flag == 1)
            {
                r++;
                c++;
            }
            else
            {
                r--;
                c--;
            }
        }
        //change the moving direction
        flag = -flag;

        System.out.println();

    }
}

// print the run-length coding result, i.e., content of rlc[][] 
void printCodingResult()
{
    System.out.println("Run-length coding on the zigzag path: ");

}

Чтобы выполнить rlc[][], я думаю каждый раз, когда A[r][c] изменяется с 0 на 1 или наоборот, записывать и сбрасывать счетчик. Но как мне это включить. Как rlc[][] это запомнит? Как видно из примера, rlc[][] отображается в формате двух столбцов (один для 0 или 1, второй для количества). Цените любые идеи. Спасибо.


person Brown123    schedule 11.03.2015    source источник


Ответы (1)


person    schedule
comment
Добро пожаловать в Stack Overflow! Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и/или как этот код отвечает на вопрос, повышает его ценность в долгосрочной перспективе. - person Ajean; 26.02.2016