19,469
社区成员
发帖
与我相关
我的任务
分享
// array为数组,共有n*n个元素,n为数组行数,type为移动类型
void MoveMatrix(int * array, int n, int type) {
int * pBuffer;
int i;
pBuffer = new int[n];
switch(type) {
case 0: //左移一单元
for(i=0;i<n;i++) {
memcpy(pBuffer,&array[i*n+1],sizeof(int) * (n-1));
memcpy(&array[i*n],pBuffer,sizeof(int) * (n-1));
array[i*n+n-1] = 0;
}
break;
case 1: //右移一单元
for(i=0;i<n;i++) {
memcpy(pBuffer,&array[i*n],sizeof(int) * (n-1));
memcpy(&array[i*n+1],pBuffer,sizeof(int) * (n-1));
array[i*n] = 0;
}
break;
case 2: //上移一单元
for(i=1;i<n;i++) {
memcpy(pBuffer,&array[i*n],sizeof(int) * n);
memcpy(&array[(i-1)*n],pBuffer,sizeof(int) * n);
}
memset(&array[(n-1)*n],0,sizeof(int) * n);
break;
case 3: //下移一单元
for(i=n-2;i>=0;i--) {
memcpy(pBuffer,&array[i*n],sizeof(int) * n);
memcpy(&array[(i+1)*n],pBuffer,sizeof(int) * n);
}
memset(&array[0],0,sizeof(int) * n);
break;
default:
printf("LZ不按套路出牌\n");
}
delete[] pBuffer;
}