第一种方法http://blog.csdn.net/friendan/article/details/8824682
第二种方法http://www.nowamagic.net/librarys/veda/detail/1044
#define n 4
//矩阵顺时针旋转90度
void Rotation(int a[n][n])
{
int i;
int k;
int j;
/*顺时针旋转90°的算法*/
for(i=0;i<n/2;i++)/*共有n/2个旋转环*/
for(k=0;k<n-1-i-i;k++)/*每个旋转环共有n-1-i-i个旋转组,每组4个元素,逐个旋转*/
{/*旋转组4个元素,分别是a[i][k+i]左上角,a[k+i][n-1-i]右上角,a[n-1-i][n-1-i-k]右下角,a[n-1-i-k][i]左下角*/
int t;
t =a[i][k+i];//左上角
a[i][k+i]=a[n-1-i-k][i];//左下角的值赋给左上角
a[n-1-i-k][i]=a[n-1-i][n-1-i-k];//右下角赋给左上角
a[n-1-i][n-1-i-k]=a[k+i][n-1-i];//右上角赋给右下角
a[k+i][n-1-i]=t;//左上角赋给右上角
}
/*输出旋转后的矩阵*/
printf("After rotating the array is:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
void main(void)
{
int arr[n][n]={ {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
cout<<"矩阵顺时针旋转前\n";
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%3d ",arr[i][j]);
cout<<endl;
}
Rotation(arr);
cout<<"\n矩阵顺时针旋转90度后\n";
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%3d ",arr[i][j]);
cout<<endl;
}
cin.get();
}