如何每次在不同大小的循环中重新声明相同的数组

How to redeclare the same array again in a loop with different size everytime?

本文关键字:数组 新声明 声明 循环 何每次      更新时间:2023-10-16

所以我正在做一个图形着色问题,在这个问题中,我输入了代码必须运行的测试用例的数量。这是代码:

#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数组的方式上。那么,如何正确地做到这一点,以便在每个案例中都能运行呢?

伙计们,问题已经解决了。问题不在于colVert数组的声明方式,而是一个非常愚蠢的错误:

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

我在循环中的一个循环中使用了变量"I",该循环也使用"I"作为计数器。简单地使用任何其他计数器变量就解决了这个问题。