剑指offer之面试题20顺时针打印矩阵

问题描述

输入一个矩阵,按照从外向内以顺时针的顺序一次打印出每一个数字。

实现代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int R,C;
void doPrintMaxtriClock(int Matri[R][C],int start,int column,int row){
	int endX = column-start-1;
	int endY=row-start-1;
	int i ;
	for(i=start;i<=endX;i++){
		printf("%d, ",Matri[start][i]);
	}
	if(start<endY){
		for(i=start+1;i<=endY;i++){
			printf("%d, ",Matri[i][endX]);
		}
	}
	if(start<endX && start < endY){
		for(i=endX-1;i>=start;--i){
			printf("%d, ",Matri[endY][i]);
		}
	}
	
	if(start<endY-1 && start <endX){
		for(i=endY-1;i>start;--i){
			printf("%d, ",Matri[i][start]);
		}
	}
}

void PrintMaxtriClock(int **Matri,int column,int row){
	
	if(Matri==NULL || column<=0 || row <=0){
		return ;
	}
	int start = 0;
	while(column>2*start && row>2*start){
		doPrintMaxtriClock(Matri,start,column,row);
		++start;
	}
	return ;
} 
int main(int argc, char *argv[])
{
	int M[4][4]={
	{
		1,2,3,4
	},{
		5,6,7,8
	},{
		9,10,11,12
	},{
		13,14,15,16
	}
};


	int column = sizeof(M[0])/sizeof(int);
	int row = sizeof(M)/sizeof(M[0]);
	R=row;C=column;
	int i,j;
	for(i=0;i<row;i++){
		for(j=0;j<column;j++){
			printf("%d  ",M[i][j]);
		}
	}
	printf("\ncolumn is:%d  row is:%d",column,row);
	printf("\nthe folow is sort by rule :\n");

	PrintMaxtriClock(M,column,row);
	return 0;
}

参考资料
剑指offer

备注
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/51372256
作者:WSYW126

你可能感兴趣的:(剑指offer)