笔记4

来源:互联网 发布:旅游数据统计中心 编辑:程序博客网 时间:2024/05/29 16:31

打印矩阵

转自http://www.cnblogs.com/python27/

#include<iostream>#include<string>using namespace std;void PrintMatrixCircle(int **num,int sX,int sY,int eX,int eY);//给定矩阵,给定行列,由外向内顺时针打印数字void PrintMatrixClockwisely(int **matrix,int rows,int columns){    if(matrix == NULL || rows < 0 || columns < 0)        return;    int startX = 0;    int startY = 0;    int endX = rows - 1;    int endY = columns - 1;    while(1)    {        if(startX > endX && startY > endY)            break;        if(startX == endX && startY > endY)            break;        if(startX > endX && startY == endY)            break;                PrintMatrixCircle(matrix,startX,startY,endX,endY);                ++startX;        ++startY;        --endX;        --endY;    }}//对于给定矩阵,给定对角线上两点,打印这一周的元素void PrintMatrixCircle(int **num,int sX,int sY,int eX,int eY){    //只有一行的情况,直接打印,返回。    if(sX == eX)    {        for(int j = sY;j <= eY;++j)        {            cout<<*(*(num+sX)+j)<<"\t";        }        return;    }    //只有一列的情况,直接打印,返回。    if(sY == eY)    {        for(int i = sX;i <= eX;++i)        {            cout<<*(*(num+i)+sY)<<"\t";        }        return;    }        //一般的情况打印四行    for(int p = sY;p < eY;++p)    {        cout<<*(*(num+sX)+p)<<"\t";    }    for(int q = sX;q < eX;++q)    {        cout<<*(*(num+q)+eY)<<"\t";    }    for(int m = eY;m > sY;--m)    {        cout<<*(*(num+eX)+m)<<"\t";    }        for(int n = eX;n > sX;--n)    {        cout<<*(*(num+n)+sY)<<"\t";    }}int main(){    int example[6][6];    int *point1[6] = {example[0],example[1],example[2],example[3],example[4],example[5]};    int **point = point1;     int cnt=1;        //初始化    for(int i = 0;i < 6;i++)    {            for(int j = 0;j < 6;j++)        {            example[i][j] = cnt;            cnt++;        }    }    cout<<"the original matrix is:"<<endl;    for(i = 0;i < 6;i++)    {        for(int j = 0;j < 6;j++)        {            cout<<example[i][j]<<"\t";        }        cout<<endl;    }    cout<<"the clockwisely output of the matrix is:"<<endl;    PrintMatrixClockwisely(point,6,6);    cout<<endl;        return 0;}
方法二:转
#include <iostream>using namespace std;//顺时针打印矩阵void PrintMetrix(int**arr,int num,int start_x,int end_x,int start_y,int end_y){ bool up=true; bool left=true; bool down=false; bool right=false; int i; while(num>0) {  if(left&&up)  {   for(i=start_x;i<=end_x;++i)   {    cout<<arr[start_y][i]<<" ";    num--;   }   start_y++;   left=false;   right=true;  }  else if(right&&up)  {   for(i=start_y;i<=end_y;++i)   {    cout<<arr[i][end_x]<<" ";    num--;   }   end_x--;   up=false;   down=true;  }  else if(right&&down)  {   for(i=end_x;i>=start_x;i--)   {    cout<<arr[end_y][i]<<" ";    num--;   }   end_y--;   left=true;   right=false;  }  else if(left&&down)  {   for(i=end_y;i>=start_y;--i)

方法三转

最直观的方法:

#include<iostream>using namespace std;#define N 9void PrinArryByClockwise(int n[][N], int x1, int y1, int x2, int y2)    {        int i;        if ( x1 > x2 || y1 > y2)             return;        for (i = y1; i <= y2; i++) printf("%d,", n[x1][i]); // 第一行        if (x2 > x1)        {            for (i = x1+1; i <= x2; i++) printf("%d,", n[i][y2]); //最右一列           for (i = y2 - 1; i >= y1; i--) printf("%d,", n[x2][i]); //最后一行           for (i = x2 - 1; i > x1; i--) printf("%d,", n[i][y1]);//最左一列        }        PrinArryByClockwise(n, x1+1, y1+1, x2-1, y2-1);    }int main(){int n[3][N]={{0,3,5,6,7,8,10,100,200},                 {0,3,5,6,7,8,10,100,200},                 {0,3,5,6,7,8,10,100,200}                 };    PrinArryByClockwise(n, 0,0,2,8);}


0 0
原创粉丝点击