Как заново объявить один и тот же массив в цикле с разным размером каждый раз? - PullRequest
0 голосов
/ 07 ноября 2019

Итак, я делаю задачу раскраски графа, в которой я ввожу количество тестов, для которых должен выполняться код. Вот код:

#include <bits/stdc++.h>
using namespace std;


int main() {
    int test,num,i,j,k,l,sum,num1,num2,count,col;
    cin>>test;
    for(i=0;i<test;i++){
        sum = 0;
        cin>>num;
        int arr[num][num];

        for(j=0;j<num;j++){
            for(k=0;k<num;k++){
                arr[j][k] = 0;
            }
        }

        for(l=0;l<num-1;l++){
            cin>>num1>>num2;
            arr[num1-1][num2-1] = 1;
            arr[num2-1][num1-1] = 1;
        }

        int* colVert = new int[num];

        for(j=0;j<num;j++){
            colVert[j] = 0;
        }

        for(j=0;j<num;j++){
            count = 0;
            l=0;
            if(j == 0){
                colVert[j] = 1;
            }

            else{
                for(k=0;k<num;k++){
                    if(arr[j][k] == 1){
                        count++;
                    }
                }
                int colSeq[count];
                for(k=0;k<num;k++){
                    if(arr[j][k] == 1){
                        colSeq[l] = colVert[k];
                        l++;
                    }
                }
                sort(colSeq, colSeq+count);
                /*for(k=0;k<count;k++){
                    cout<<colSeq[k];
                }*/
                for(k=0;k<count;k++){
                    if(colSeq[k] != k+1){
                        col = k;
                        break;
                    }
                    else{
                        col = colSeq[k] + 1;
                    }
                }
                colVert[j] = col;
            }
        }

        for(i=0;i<num;i++){
            sum = sum + colVert[i];
        }

        cout<<sum<<endl;
    }
    return 0;
}

Таким образом, проблема в том, что код выполняется только для первого контрольного примера, а затем программа заканчивается. Я думаю, что проблема в том, как я объявил массив colVert. Так как сделать это правильно, чтобы он работал для каждого случая?

1 Ответ

0 голосов
/ 07 ноября 2019

Ребята, проблема была решена. Проблема была не в том, как был объявлен массив colVert, а в действительно глупой ошибке:

for(i=0;i<num;i++){
            sum = sum + colVert[i];
        }

Я использовал переменную 'i' в цикле внутри цикла, который также использует 'i' в качестве своего счетчика. Простое использование любой другой переменной-счетчика решило проблему.

...