华为2015应届生招聘机考体验-杭州站 第3题
来源:互联网 发布:linux如何搭建https 编辑:程序博客网 时间:2024/04/28 17:10
/*
*你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,
但你只能吃掉能连成给定单词W的食物。
如下图,指定W为“SOLO”
C P U C Y
E K L Q H
C R S O L
F A I A O
P G R B C
注意区分英文字母大小写,你只能上下左右行走。
输入:第一行包含两个整数n、m(0<n, m<21)分别表示n行m列的矩阵,第二行是长度不超过
100的单词W,从第3行到底n+3行是只包含大小写英文字母的长度为m的字符串。
输出:如果能在地图中连成给定的单词,则输出“YES”,否则输出“NO”。
#include<stdio.h>
#include<string.h>
char str[22][22];
int mark[22][22]={0};
char w[101];
int go[][2]={1,0,-1,0,0,1,0,-1}; //四方向行走坐标差
int n,m; //地图n*m
char flag=0; //是否成功标记
int len; //w的长度
void DFS(int x,int y,int k){
int i;
for(i=0;i<4;i++){ //枚举四个相邻位置
int nx=x+go[i][0];
int ny=y+go[i][1];
if(nx<0||nx>n||ny<0||ny>m) //地图外
continue;
if(mark[nx][ny]==1)
continue; //该位置遍历过
if(str[nx][ny]==w[k]){
if(k==len-1){
flag=1; //搜索成功
return;
}
}else
continue; //此状态后的状态都不是
mark[nx][ny]=1; //标记此状态遍历过
DFS(nx,ny,k+1);
if(flag==1) //已经成功,则直接返回
return ;
}
}
int main(){
scanf("%d %d",&n,&m);
int i,j;
scanf("%s",w);
for(i=0;i<n;i++){
scanf("%s",str[i]);
}
len=strlen(w);
for(i=0;i<n;i++){
for(j=0;j<m;j++){
mark[i][j]=1;
DFS(i,j,0);
}
}
if(flag==1)
printf("YES\n");
else
printf("NO\n");
return 0;
}
*你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,
但你只能吃掉能连成给定单词W的食物。
如下图,指定W为“SOLO”
C P U C Y
E K L Q H
C R S O L
F A I A O
P G R B C
注意区分英文字母大小写,你只能上下左右行走。
输入:第一行包含两个整数n、m(0<n, m<21)分别表示n行m列的矩阵,第二行是长度不超过
100的单词W,从第3行到底n+3行是只包含大小写英文字母的长度为m的字符串。
输出:如果能在地图中连成给定的单词,则输出“YES”,否则输出“NO”。
注意:每个字母只能用一次。
思路:深度优先搜索
#include<stdio.h>
#include<string.h>
char str[22][22];
int mark[22][22]={0};
char w[101];
int go[][2]={1,0,-1,0,0,1,0,-1}; //四方向行走坐标差
int n,m; //地图n*m
char flag=0; //是否成功标记
int len; //w的长度
void DFS(int x,int y,int k){
int i;
for(i=0;i<4;i++){ //枚举四个相邻位置
int nx=x+go[i][0];
int ny=y+go[i][1];
if(nx<0||nx>n||ny<0||ny>m) //地图外
continue;
if(mark[nx][ny]==1)
continue; //该位置遍历过
if(str[nx][ny]==w[k]){
if(k==len-1){
flag=1; //搜索成功
return;
}
}else
continue; //此状态后的状态都不是
mark[nx][ny]=1; //标记此状态遍历过
DFS(nx,ny,k+1);
if(flag==1) //已经成功,则直接返回
return ;
}
}
int main(){
scanf("%d %d",&n,&m);
int i,j;
scanf("%s",w);
for(i=0;i<n;i++){
scanf("%s",str[i]);
}
len=strlen(w);
for(i=0;i<n;i++){
for(j=0;j<m;j++){
mark[i][j]=1;
DFS(i,j,0);
}
}
if(flag==1)
printf("YES\n");
else
printf("NO\n");
return 0;
}
0 0
- 华为2015应届生招聘机考体验-杭州站 第3题
- 华为2015应届生招聘机考体验-杭州站 第2题
- 华为2015应届生招聘机考体验-杭州站 第1题
- 华为校园招聘笔试题(机考题目)
- 2015华为招聘题
- 2015华为实习生招聘机试模拟考1之密码截取
- 2017华为实习生招聘机考模拟题——0交换排序
- 2014华为校园招聘机考(10.12北京)
- 20150802厦门大学华为校园提前批招聘机试体验题一:记票统计
- 京东2015年应届生招聘笔试题(A)卷
- 宇视科技2015应届生招聘笔试题
- 华为2013校园招聘上机试题(杭州)
- 2011应届生百度校园招聘题
- 2015华为实习生招聘机试题长沙站
- 2015华为校园招聘机试模拟题及解答
- 2015华为招聘机试样题(java实现)
- 华为2014校园招聘经历_底层软件研发_机考
- 2015届华为校园招聘机试题 (3)java实现
- IT人物雷军:伟大的作品不可能抄袭
- 数组
- struts2中<jsp:forward>跳转时报404错误的问题
- Status Code Definitions - Http 状态码
- 捕鱼达人(三)
- 华为2015应届生招聘机考体验-杭州站 第3题
- eclispe常用设置
- JS获取当前时间戳的方法-JavaScript 获取当前时间戳
- 什么是QA?
- 由于自己修改了库文件出现了问题
- 应用级app覆盖系统级app注意事项
- loadrunner--随机字母组合
- Web标准基础教程:CSS简写指南
- Android manifest属性理解