2017 Indeed-tokyo笔试题-6*6的矩阵放置元素
来源:互联网 发布:手机视频播放器 知乎 编辑:程序博客网 时间:2024/06/05 18:23
Indeed-tokyo笔试题三:
级别:难
题目:6*6的矩阵,每个元素为o或者.
给出一个矩阵,使得每行每列o的个数都为3
求出所有可能的放置方式数目。
思路:每列求出当前转态合法放置数,按行进行深度搜索
#include <iostream>#include<vector>using namespace std;#include <time.h>#include <sys/timeb.h>//程序计时 int get_time(string r){ struct timeb rawtime; ftime(&rawtime); static int ms = rawtime.millitm; static unsigned long s = rawtime.time; int out_ms = rawtime.millitm - ms; unsigned long out_s = rawtime.time - s; if (out_ms < 0) { out_ms += 1000; out_s -= 1; } ms = rawtime.millitm; s = rawtime.time; int total = 1000*out_s+out_ms; cout<<r<<": "<<total<<"ms"<<endl; return total;}//行是否已经成功,恰为3个 bool rowSucceed(const vector<vector<char>> &m,int row){ int rn=0,cn=0; for(int i=0;i<6;++i) if(m[row][i]=='o')rn++; if(rn==3)return true; else return false; }//行是否合法 bool rowLegal(const vector<vector<char>> &m,int row){ int rn=0; for(int i=0;i<6;++i) if(m[row][i]=='o')rn++; if(rn<=3)return true; else return false; }//放置了i,j,第j列是否合法 bool colLegal(const vector<vector<char>> &m,int col){ int cn=0; for(int i=0;i<6;++i) if(m[i][col]=='o')cn++; if(cn<=3)return true; else return false; }//在一行里以元素为单位进行深搜出可行的行放置元素排列 void numLegalRow(vector<vector<char>> &m,int r,int c,vector<vector<char>> &res){ if(rowSucceed(m,r)){ res.push_back(m[r]); } else{ if(!rowLegal(m,r))return; for(int j=c;j<6;++j){ if(m[r][j]=='.'){ m[r][j]='o'; if(colLegal(m,j))numLegalRow(m,r,j+1,res); m[r][j]='.'; } } }}//按行为单位深度搜索,每次从该行的一个可行节点出发 void numLegalTable(vector<vector<char>> m,int row,int &res){ vector<vector<char>> vtmp; numLegalRow(m,row,0,vtmp); //cout<<vtmp.size()<<endl; if(row==5){ res=res+vtmp.size(); } else { for(int p=0;p<vtmp.size();++p){ m[row] = vtmp[p]; numLegalTable(m,row+1,res); } }}int main(){ vector<vector<char> > matrix; for(int i=0;i<6;++i)matrix.push_back(vector<char>(6)); for(int i=0;i<6;++i) for(int j=0;j<6;++j){ char ch; cin>>ch; matrix[i][j]=ch; } get_time("begin:"); int res=0; numLegalTable(matrix,0,res); cout<<res<<endl; get_time("end:"); return 0;}
0 0
- 2017 Indeed-tokyo笔试题-6*6的矩阵放置元素
- 【在线笔试题解题报告系列】Indeed Tokyo 2017校园招聘 在线测试3(时间:2016.07.09)
- indeed 在线笔试题
- indeed一道在线笔试题
- 求unsafe集合-indeed Tokyo
- [2016 indeed笔试题] Tables and Pieces
- indeed秋招笔试第一场
- 搜狗2016招聘笔试题<矩阵元素相乘>Java代码(
- 页面元素可拖拽放置的实现原理
- Array数组放置多元元素的方法
- jQuery ui限制可放置的元素
- 刷刷笔试题~~[矩阵]
- Indeed公司的 A/B Test 框架
- 拖动元素放置例子
- css元素水平放置
- tokyo cabinet源代码分析(6)
- 名企笔试:搜狗2016研发工程师笔试(矩阵元素相乘)2017-03-13 算法爱好者
- P122 第19题 将数组元素逆序放置
- java开发各层对象含义
- 2-6 ance desc选择器
- 231. Power of Two
- 卷积神经网络及其在图像处理中的应用
- MySQL 5.6 for Windows 解压缩版配置安装
- 2017 Indeed-tokyo笔试题-6*6的矩阵放置元素
- java多线程基础总结
- 前端性能优化:jquery性能优化
- 2-7parent > child选择器
- Tomcat7源码分析——启动过程和类加载器
- 插入排序
- 左右最值最大差
- Android中定时任务的实现
- Android的getLeft,getX,getTranslation,getRawX的理解