模拟桌面自动整理, 先顶左,再顶上。
5 6
**##**
****#*
***##*
#*****
***#**
##****
##****
#*****
#*****
#*****
#include<iostream>
using namespace std;
#define MAX 1024char a[MAX][MAX];
void H(char arr[][MAX], int n,int idx) {//n列数 ,idx 某行int left = 0;int right = n - 1;char t;while (left < right) {int left = 0;int right = n - 1;while (arr[idx][left] == '#')left++;while (arr[idx][right] == '*')right--;if (left >= right)break;t = arr[idx][left];arr[idx][left] = arr[idx][right];arr[idx][right] = t; }
}void L(char arr[][MAX], int n, int idx) {//n行数 ,idx 某列int top = 0;int down = n - 1;char t;while (top < down) {int top = 0;int right = n - 1;while (arr[top][idx] == '#')top++;while (arr[down][idx] == '*')down--;if (top >= down)break;t = arr[top][idx];arr[top][idx] = arr[down][idx];arr[down][idx] = t;}
}void print(int h,int l) {for (int i = 0; i < h; i++) {for (int j = 0; j < l; j++)cout << a[i][j];cout << endl;}
}int main() {int h, l;cin >> h>>l;for (int i = 0; i < h; i++) {for (int j = 0; j < l; j++)cin >> a[i][j];getchar();}//print(h,l);for (int i = 0; i < h; i++) H(a,l,i);for (int i = 0; i < h; i++) L(a,h,i);print(h, l);return 0;
}