您的位置:首页 > 其它

华为题目(寻找是否存在路径问题)。。。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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: