2014 一网络公司 在线 面试题目 打印矩阵

2014 公司面试题目 打印矩阵,先往右打印,到头然后向左下打印,到头然后向左打印,最后向上打印。

然后再向矩阵里面重复以上动作。

./amazon_online_matric

//input

5 3

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

 

//output

1 2 3 4 5 9 13 12 11 6 7 8

 

另外一个测试用例

//input

3 5

1 2 3

4 5 6

7 8 9

10 11 12

13 14 15

//output

1 2 3 5 7 4

 

Third test case

//input

4 4

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16


#include < map >
#include < set >
#include < list >
#include < cmath >
#include < ctime >
#include < deque >
#include < queue >
#include < stack >
#include < bitset >
#include < cstdio >
#include < limits >
#include < vector >
#include < cstdlib >
#include < numeric >
#include < sstream >
#include < iostream >
#include < algorithm >
using namespace std;

map printednodeMap;
 map::iterator it;
 vector outdata;
 int **data=NULL;
 int Matrixwidth,Matrixheight;

void firstprint(int x1,int y1,int x2, int y2){
   
    if(x1 >= Matrixwidth || y1 >= Matrixheight)
        return;
    int row,column;
   //to right
   for(column=x1;column<=x2;column++){
    if(printednodeMap[y1*Matrixwidth+column]==true) {
       //printed
        break;
    }      
     outdata.push_back(data[y1][column]);
     printednodeMap[y1*Matrixwidth+column]=true;
  }
  //to leftdown
  column-=2;
  row=y1+1;
  while((column>=x1)&&(row<=y2)) {
    if(printednodeMap[row*Matrixwidth+column]==true){
        //printed
       //return;
        break;
      }
   
     outdata.push_back(data[row][column]);
     printednodeMap[row*Matrixwidth+column]=true;
    column--;
    row++;
  }
 
     row--;
     column++;
    //to left
  while((column-1) >= x1){
      column--;
      if(printednodeMap[row*Matrixwidth+column]==true){
      //printed
         return;
      }
     outdata.push_back(data[row][column]);
     printednodeMap[row*Matrixwidth+column]=true;    
  }
  //  to up
   row--;
    while(row>=y1){
      if(printednodeMap[row*Matrixwidth+column]==true){
        //printed
       break;       
      }     
      outdata.push_back(data[row][column]);
      printednodeMap[row*Matrixwidth+column]=true; 
     row--; 
    }
    firstprint(x1+1,y1+1,x2-1,y2-1);
}

vector convertMatrix(int width, int height, vectormatrix) {
 
  Matrixwidth=width;
  Matrixheight=height;  
  //make **data
  data=new int *[height];
  //make a trial to generate ** of string[][]
  //BTW define int data[height][width]; is also OK in C++
  string **dtm=NULL;
  dtm=new string *[height];
 
  for(int index=0;index
    data[index]=new int[width];
    dtm[index]=new string[width];
  }
 // OK to define here dynamically
 // int data[height][width];
 
 int i,j;
 for(i=0;i
    for(j=0;j
        data[i][j]=matrix[ i* width + j];
    }
 }
 for(i=0;i
  printednodeMap[i]=false;  
 }
 //first print
  firstprint(0,0,width-1,height-1); 
  return outdata;  
 
}
int main() {
    vector < int > res;
    int _width;
    cin >> _width;
   
    int _height;
    cin >> _height;
   
    vector _matrix;
    int _matrix_item;
    for(int _matrix_i=0; _matrix_i<_width * _height; _matrix_i++) {
        cin >> _matrix_item;
        _matrix.push_back(_matrix_item);
    }
   
    res = convertMatrix(_width, _height, _matrix);
    for(int res_i=0; res_i < res.size(); res_i++) {
     cout << res[res_i] << " ";
    }
   
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值