对昨天笔试题的一些总结
2016-01-22 17:57
232 查看
昨天下午,投的实习简历终于有了消息。HR发过来一套笔试题,共四个题。要求一小时之内做完并发过去,这是第一次收到这么正式的笔试题,虽然是自己线下在家里做的,但心里难免紧张。
下面是最后一个题,感觉有思路,但当时没写出来。
*寻找所有连接点 :有一个 n n 的整型二维数组,现随便输入一个数组内的节点坐标,请输入与此节点连接在一起的所有值相同的节点的坐标。
**
当输入(2, 1)后,即图中黄底的节点,则与其连接在一起相同节点为(2,0)(2, 1)(2, 2)(2, 3)(3, 3),即图中红色标记的节点。
请完成以下函数:
void find_connected(int[][] array, int n, int x, int y) // array:要查找的数组 // n:array的大小(n*n大小) // x, y :输入的坐标 //给出辅助函数: void set_add(x, y)//将坐标(x, y)放入set中,若set中已存在该坐标,则不放入 void set_del(x, y)//将坐标从set中删除 bool set_has(x, y)//判断(x, y)是否已存在set中 void set_print()//将set中所有坐标输出
思路:该问题与曾经数据结构实习中做过的利用栈的性质走迷宫类似,迷宫问题是利用栈LIFO性质来递归解决问题。刚拿到该问题时,看到 N * N的数组首先就想能否借鉴迷宫的思想来解决。
迷宫是从给定入口处(在不越界的情况下)沿着一条通路走到出口,并输出行走的路径。该问题恰好是迷宫问题的一小部分,因为不必像迷宫那样找不到通路还要按原路返回。该问题只是将相连的且相等的值的坐标输出即可。
下面是辅助函数写的代码:
void find_connected(int array[][], int n, int x, int y) { int temp = array[x][y]; if(x > n - 1 || y > n - 1) return; while(!set_has(x, y)) { set_add(x, y); } if(temp == array[x - 1][y]) find_connected(array, n, x - 1, y); else if(temp == array[x + 1][y]) find_connected(array, n, x + 1, y); else if(temp == array[x][y + 1]) find_connected(array, n, x, y + 1); else if(temp == array[x][y - 1]) find_connected(array, n, x, y - 1); }
相关文章推荐
- stm32之keil开发环境搭建
- linux 编辑保存文件命令
- 判断一个链表是否有环
- debian 搭建svn 服务器
- linux内核启动第二阶段之setup_arch()函数分析-2.6.36
- 18款js和jquery文字特效代码分享
- 不用VS自带的打包工具,不用InstallShield。用C#自己制作安装程序
- 3小时做完3天工作,她是用了什么办法做到的?
- lua中集成第三方拓展c库
- Velocity 用户指南手册中文版(转)
- BPDU Gard / BPDU Filter / Root Guard
- jQuery val() 在不同.NET 环境下显示不同值。
- js选择不同浏览器点击收藏夹功能(主要是 IE与firefox的区别)
- git clone cm source & cm vs android version
- c#读写ini文件
- spring学习概览
- NYOJ 16 矩形嵌套 【DAG模型——嵌套矩形问题】
- 云计算相关资料
- check_mk 客户端安装配置
- 有关Microsoft.Office.Interop.Word的使用例子(未整理)