华为题目(寻找是否存在路径问题)。。。2014.5.9
2014-05-09 11:09
351 查看
笨笨熊搬家交通篇
描述:
森林里的苯苯熊要乔迁新喜,上次他已经将物品打包完成,并约了朋友来帮忙。接下来他要选定一个搬家的时间,想了很久,就决定在国庆节进行,因为国庆放假朋友们都有时间啦。但是在森林里,从他现在房子到新豪宅,所经之地有山有水,路途曲折,甚至有些道路是不通的。
请你和他一起查看指定的地图,看看从笨笨熊现在的房子到新宅之间,道路是否是畅通的呢?
地图是R行、C列的矩阵,矩阵的每一个格子刚好是一天的行程。
矩阵由“B”、“-”、“#”、“H”四种字符成员组成,其中:
B: 代表苯苯熊现在的房子;
H: 代表笨笨熊新的豪宅;
-: 代表可以通行的道路;
#: 代表无法通过的障碍(高山、大河等);
此外,森林里也有交通规则地:在任务位置,只能向“上、下、左、右”四个方向中的其中一个方向行走。
运行时间限制:
无限制
内存限制:
无限制
输入:
4 // R的数值
4 // C的数值,下面是地图。
--##---
B-----H
#---#--
-------
输出:
Y //代表道路可达
或
N //代表道路不通
样例输入:
15-B-H#
样例输出:
Y
#include <STDLIB.H>
#include <STDIO.H>
#include <STRING.H>
int main()
{
int R,C,i,j,m,n;
char **arry;
int RH,CH;
int RB,CB;
scanf("%d",&R);
fflush(stdin);
scanf("%d",&C);
fflush(stdin);
if(NULL==(arry=(char **)malloc(sizeof(char *)*R)))
return -1;
for(i=0;i<C;i++)
if(NULL==(arry[i]=(char *)malloc(sizeof(char)*C)))
return -1;
for(i=0;i<R;i++)
gets(arry[i]);
/*找出B和H在矩阵中的位置*/
for(i=0;i<R;i++)
for(j=0;j<C;j++)
{
if(arry[i][j]=='B')
{RB=i;CB=j;}
if(arry[i][j]=='H')
{RH=i;CH=j;}
}
/*将B处的值置为0*/
arry[RB][CB]='0';
// printf("%c",arry[RB][CB]);
/*循环的寻找R*C次,每次将所有为0处的值得上下左右可以置零的地方置零*/
for(i=0;i<(R*C);i++)
{
for(m=0;m<R;m++)
{
for(n=0;n<C;n++)
{
if(arry[m]
=='0')
{
if((m+1)<R&&arry[m+1]
!='#')
{
arry[m+1]
='0';
if((m+1)==RH&&n==CH)
return printf("Y \n");
}
if((m-1)>=0&&arry[m-1]
!='#')
{
arry[m-1]
='0';
if((m-1)==RH&&n==CH)
return printf("Y \n");
}
if((n+1)<C&&arry[m][n+1]!='#')
{
arry[m][n+1]='0';
if(m==RH&&(n+1)==CH)
return printf("Y \n");
}
if((n-1)>=0&&arry[m][n-1]!='#')
{
arry[m][n-1]='0';
if(m==RH&&(n-1)==CH)
return printf("Y \n");
}
}
}
}
}
return printf("N \n");
/*
for(i=0;i<R;i++)
{
for(j=0;j<C;j++)
{
printf("%c",arry[i][j]);
}
printf("\n");
}
*/
// return 0;
}
描述:
森林里的苯苯熊要乔迁新喜,上次他已经将物品打包完成,并约了朋友来帮忙。接下来他要选定一个搬家的时间,想了很久,就决定在国庆节进行,因为国庆放假朋友们都有时间啦。但是在森林里,从他现在房子到新豪宅,所经之地有山有水,路途曲折,甚至有些道路是不通的。
请你和他一起查看指定的地图,看看从笨笨熊现在的房子到新宅之间,道路是否是畅通的呢?
地图是R行、C列的矩阵,矩阵的每一个格子刚好是一天的行程。
矩阵由“B”、“-”、“#”、“H”四种字符成员组成,其中:
B: 代表苯苯熊现在的房子;
H: 代表笨笨熊新的豪宅;
-: 代表可以通行的道路;
#: 代表无法通过的障碍(高山、大河等);
此外,森林里也有交通规则地:在任务位置,只能向“上、下、左、右”四个方向中的其中一个方向行走。
运行时间限制:
无限制
内存限制:
无限制
输入:
4 // R的数值
4 // C的数值,下面是地图。
--##---
B-----H
#---#--
-------
输出:
Y //代表道路可达
或
N //代表道路不通
样例输入:
15-B-H#
样例输出:
Y
#include <STDLIB.H>
#include <STDIO.H>
#include <STRING.H>
int main()
{
int R,C,i,j,m,n;
char **arry;
int RH,CH;
int RB,CB;
scanf("%d",&R);
fflush(stdin);
scanf("%d",&C);
fflush(stdin);
if(NULL==(arry=(char **)malloc(sizeof(char *)*R)))
return -1;
for(i=0;i<C;i++)
if(NULL==(arry[i]=(char *)malloc(sizeof(char)*C)))
return -1;
for(i=0;i<R;i++)
gets(arry[i]);
/*找出B和H在矩阵中的位置*/
for(i=0;i<R;i++)
for(j=0;j<C;j++)
{
if(arry[i][j]=='B')
{RB=i;CB=j;}
if(arry[i][j]=='H')
{RH=i;CH=j;}
}
/*将B处的值置为0*/
arry[RB][CB]='0';
// printf("%c",arry[RB][CB]);
/*循环的寻找R*C次,每次将所有为0处的值得上下左右可以置零的地方置零*/
for(i=0;i<(R*C);i++)
{
for(m=0;m<R;m++)
{
for(n=0;n<C;n++)
{
if(arry[m]
=='0')
{
if((m+1)<R&&arry[m+1]
!='#')
{
arry[m+1]
='0';
if((m+1)==RH&&n==CH)
return printf("Y \n");
}
if((m-1)>=0&&arry[m-1]
!='#')
{
arry[m-1]
='0';
if((m-1)==RH&&n==CH)
return printf("Y \n");
}
if((n+1)<C&&arry[m][n+1]!='#')
{
arry[m][n+1]='0';
if(m==RH&&(n+1)==CH)
return printf("Y \n");
}
if((n-1)>=0&&arry[m][n-1]!='#')
{
arry[m][n-1]='0';
if(m==RH&&(n-1)==CH)
return printf("Y \n");
}
}
}
}
}
return printf("N \n");
/*
for(i=0;i<R;i++)
{
for(j=0;j<C;j++)
{
printf("%c",arry[i][j]);
}
printf("\n");
}
*/
// return 0;
}
相关文章推荐
- MapReduce 判断输出路径是否存在问题
- 是否存在欧拉路径问题 POJ - 1386 hihoCoder - 1181
- 关于深搜和广搜在图中两点间是否存在路径问题上的工作效率情况探讨~
- 迷宫问题1-在给定的迷宫中判断是否存在一条路径从起点到终点
- 华为机试 是否存在路径(深度优先遍历、回朔法、递归)
- 运行Android应用时提示ADB是否存在于指定路径问题
- 运行Android应用时提示ADB是否存在于指定路径问题
- 第十二周 项目4 利用遍历思想求解图问题(检查是否有简单路径)
- nodejs 网上下载图片到本地,并判断图片路径是否存在
- linux下判断路径是否存在的3种方法
- 网购保修是否存在问题
- 题目1008:最短路径问题
- leetcode题目 寻找和为SUM的集合系列问题
- 编程之美3.6 判断单链表是否存在环,判断两个链表是否相交问题详解
- 判断条件问题是否存在
- 题目1162:I Wanna Go Home(最短路径问题进阶dijkstra算法))
- C/C++检测路径是否存在并创建
- Android 获取SD卡路径和推断SD卡是否存在
- 关于一中一英文章是否存在版权问题说明
- 判断单链表是否存在环,判断两个链表是否相交问题详解(转载)