华为题目(寻找是否存在路径问题)。。。2014.5.9

笨笨熊搬家交通篇
描述:
    森林里的苯苯熊要乔迁新喜,上次他已经将物品打包完成,并约了朋友来帮忙。接下来他要选定一个搬家的时间,想了很久,就决定在国庆节进行,因为国庆放假朋友们都有时间啦。但是在森林里,从他现在房子到新豪宅,所经之地有山有水,路途曲折,甚至有些道路是不通的。
    请你和他一起查看指定的地图,看看从笨笨熊现在的房子到新宅之间,道路是否是畅通的呢?
    地图是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][n]=='0')
		   {
			   if((m+1)<R&&arry[m+1][n]!='#')
			   {
				   arry[m+1][n]='0';
				   if((m+1)==RH&&n==CH)
					   return printf("Y \n");
			   }
			   if((m-1)>=0&&arry[m-1][n]!='#')
			   {
				   arry[m-1][n]='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;	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值