我希望将包含所有列的所有列移到右侧,并将其他所有列移到最左侧。以下是我想要实现的示例(左侧和右侧的结果:
NB。只有包含ALL的列才会向右移动。
12112111111211
12112111111211
11112112111211
11112111111211
结果:
22121111111111
22121111111111
12221111111111
12121111111111
到目前为止我的尝试: check = 1;
for (i = 1; i <= height; i++) {
for (j = 1; j <= column; j++) {
if (array[i][j] != '1'){
check = 0;
break;
}
}
}
if (check) {
for (j = 1; j < width; j++)
for (i = 1; i <= height; i++) {
if (array[i][j] == '.') {
array[i][j] = array[i][j+1];
array[i][j+1] = '1';
}
}
目前它只有左侧的两列,我理解为什么,但我不确定如何克服这个问题
答案 0 :(得分:2)
您只需要将不是全1的列放在第一位。请尝试以下方法:
int colIndex = 0;
for(int c = 0 ; c < numOfCols ; c++)
{
if(col c is not all 1)
{
swap column c with column colIndex;
colIndex++;
}
}
答案 1 :(得分:1)
您可以尝试以下算法:
for r = 0 to rows - 1
c_first = 0
for c = 0 to cols - 1
if arr[r][c] == 2
if c > c_first
swap(arr[r][c] and arr[r][c_first])
c_first++
编辑:
for c = cols - 1 to 0
c_last = cols - 1
if c has all rows = 1 AND c < c_last
swap columns c and c_last
c_last -= 1
else if c has all rows = 1 AND c = c_last
c_last -=1
这不是一个干净的算法,但应该可行。