一个数组打印的方法,请好手们帮实现

一个数组打印的方法,请高手们帮实现
输入:
5  3
1  2  3  4  5
6  7  8  9  10
11 12 13 14 15
输出:
1 2 3 4 5 9 13 12 11 6 7 8

输出规则:
先向右-》左下-》左-》上
第一行是metrics的size,和行数, 第二行开始是数据,实现下面方法,main方法能够正确输出

================================================================
void  convertMatrix(int width, int height, int* matrix, int *result_size, int** result) {
}
===============================================================
int main() {
    int res_size;
    int* res;
    int _width;
    scanf("%d", &_width);
    
    int _height;
    scanf("%d", &_height);
    
    int *_matrix = (int*) malloc(_width * _height * sizeof(int));
    int _matrix_i;
    for(_matrix_i = 0; _matrix_i < _width * _height; _matrix_i++) { 
        int _matrix_item;
        scanf("%d", &_matrix_item);
        
        _matrix[_matrix_i] = _matrix_item;
    }
    
    convertMatrix(_width, _height, _matrix, &res_size, &res);
    int res_i;
    for(res_i=0; res_i < res_size; res_i++) {
    
        printf("%d ", res[res_i]);
        
    }
    
    
    return 0;
}
------解决思路----------------------
仅供参考:
#include <stdio.h>
#define MAXN 100
int m[MAXN+2][MAXN+2];
char d;
int x,y,k,n,w;
char str[10];
void main() {
    while (1) {
        printf("Input n(1..%d):",MAXN);
        fflush(stdout);
        rewind(stdin);
        if (1==scanf("%d",&n)) {
            if (1<=n && n<=MAXN) break;
        }
    }
    y=0  ;for (x=0;x<=n+1;x++) m[y][x]=1;
    y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1;
    x=0  ;for (y=0;y<=n+1;y++) m[y][x]=1;
    x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1;
    for (y=1;y<=n;y++) {
        for (x=1;x<=n;x++) {
            m[y][x]=0;
        }
    }
    x=1;
    y=1;
    k=0;
    d='D';
    while (1) {
        k++;
        if (k>n*n) break;
        m[y][x]=k;
        switch (d) {
            case 'D':
                if (0==m[y+1][x])  y++;
                else              {x++;d='R';}
            break;
            case 'R':
                if (0==m[y][x+1])  x++;
                else              {y--;d='U';}
            break;
            case 'U':
                if (0==m[y-1][x])  y--;
                else              {x--;d='L';}
            break;
            case 'L':
                if (0==m[y][x-1])  x--;
                else              {y++;d='D';}
            break;
        }
    }
    w=sprintf(str,"%d",n*n);
    for (y=1;y<=n;y++) {
        for (x=1;x<=n;x++) {
            printf(" %0*d",w,m[y][x]);
        }
        printf("\n");
    }
}


------解决思路----------------------
#include <stdafx.h>
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#include <memory.h>

bool sprintRight(int *pSrc,
int *pTarget,
const int width,
/*const int height,*/
unsigned &currentRow,
unsigned &currentCol,
unsigned &currentSize,
const int indicator)
{
bool bRet = true;
for (int iCol = currentCol; iCol <= width; ++iCol)
{
unsigned pos = (currentRow - 1)* width + iCol -1;
if(pSrc[pos] != indicator)
{
pTarget[currentSize] = pSrc[pos];
pSrc[pos] = indicator;
printf("%d, ", pTarget[currentSize]);
currentSize++;
currentCol++;
}
else
{
bRet = false;
break;
}
}

currentCol -= 2;
currentRow++;
return bRet;
}

bool sprintLeftDown(int *pSrc,
int *pTarget,
const int width,
const int height,
unsigned &currentRow,
unsigned &currentCol,
unsigned &currentSize,
const int indicator)
{
bool bRet = true;
while (currentRow <= height)
{
unsigned pos = (currentRow-1) * width + currentCol-1;
if (pSrc[pos] != indicator)
{
pTarget[currentSize] = pSrc[pos];
pSrc[pos] = indicator;
printf("%d, ", pTarget[currentSize]);
currentSize++;

currentRow++;
currentCol--;
}
else
{
bRet = false;
break;
}
}
currentRow--;
return bRet;
}

bool sprintLeft(int *pSrc,
int *pTarget,
const int width,
/*const int height,*/
unsigned &currentRow,
unsigned &currentCol,
unsigned &currentSize,
const int indicator)
{
bool bRet = true;
while (currentCol > 0)
{
unsigned pos = (currentRow-1) * width + currentCol-1;
if (pSrc[pos] != indicator)
{
pTarget[currentSize] = pSrc[pos];
pSrc[pos] = indicator;
printf("%d, ", pTarget[currentSize]);
currentSize++;
currentCol--;
}
else
{
bRet = false;
break;
}
}
currentRow--;// for sprintTop
currentCol++;
return bRet;
}
bool sprintTop(int *pSrc,
int *pTarget,
const int width,
unsigned &currentRow,
unsigned &currentCol,
unsigned &currentSize,
const int indicator)
{
bool bRet = true;
while (currentRow > 0)
{
unsigned pos = (currentRow-1) * width + currentCol-1;
if (pSrc[pos] != indicator)
{
pTarget[currentSize] = pSrc[pos];
pSrc[pos] = indicator;
printf("%d, ", pTarget[currentSize]);
currentSize++;
currentRow--;
}
else
{
bRet = false;

break;
}
}
currentCol++;
currentRow++;
return bRet;
}
void  convertMatrix(int width, int height, int* matrix, int *result_size, int** result)
{
size_t totalsize = width * height;
int *pTarget = (int *)malloc(totalsize * sizeof(int));
* result = pTarget;
int indicator = 0;//present the invalid value
for (size_t i = 0; i < totalsize; ++i)
{
pTarget[i] = indicator;
}

unsigned currentSize = 0;//of pTarget
unsigned currentRow = 1;//of matrix
unsigned currentCol = 1;//of matrix
bool bRet1 = true, bRet2 = true, bRet3 = true, bRet4 = true;
bool bGoOn = true;
while ((currentSize < totalsize)
&& bGoOn)
{
//bRet1234: reach a border or not
bRet1 = sprintRight(matrix, pTarget, width,currentRow, currentCol, currentSize, indicator);
bRet2 = sprintLeftDown(matrix, pTarget, width, height,currentRow, currentCol, currentSize, indicator);
bRet3 = sprintLeft(matrix, pTarget, width, currentRow, currentCol, currentSize, indicator);
bRet4 = sprintTop(matrix, pTarget, width, currentRow, currentCol, currentSize, indicator);
bGoOn = bRet1 
------解决思路----------------------
 bRet2 
------解决思路----------------------
 bRet3 
------解决思路----------------------
 bRet4;
}

*result_size = currentSize;
}
int main()
{
int res_size;
int* res;
int _width;
scanf("%d", &_width);

int _height;
scanf("%d", &_height);

int *_matrix = (int*) malloc(_width * _height * sizeof(int));
int _matrix_i;
for(_matrix_i = 0; _matrix_i < _width * _height; _matrix_i++)
{
int _matrix_item;
scanf("%d", &_matrix_item);

_matrix[_matrix_i] = _matrix_item;
}

convertMatrix(_width, _height, _matrix, &res_size, &res);
printf("\n");
int res_i;
for(res_i=0; res_i < res_size; res_i++)
{

printf("%d ", res[res_i]);

}
free(_matrix);
free(res);
system("pause");
return 0;
}