| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 980 人关注过本帖
标题:一个问题的编程思路,路过的有什么好的解决思路呢
只看楼主 加入收藏
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
结帖率:91.67%
收藏
已结贴  问题点数:5 回复次数:19 
一个问题的编程思路,路过的有什么好的解决思路呢
我的想法是先在二维数组中分别找到起点和重点的坐标,find();然后起点为初始地,开始每个格子的四个方向分别寻找出路,用递归貌似不太会。
例如输入一个5*5的地图:
                           -----
                       -B##-
                       ###--
                       #---#
                       ---H#

图片附件: 游客没有浏览图片的权限,请 登录注册


程序代码:
#include <stdio.h> 
#include <stdlib.h>
char find(char*p,int B_pos1,int B_pos2,int H_pos1,int H_pos2 )
void main()
{
   int r,c;int i,j;int B_pos1,B_pos2,H_pos1,H_pos2=0;
   char *p;
   printf("请输入地图的行数和列数,空格隔开:\t");
   scanf("%d%d",&r,&c);getchar();  //----此getchar();  是为了消除前面scanf("%d%d",&r,&c);输入时留下的换行符!
   printf("请输入%d行%d列的地图:\n",r,c);

   p=(char *)malloc(sizeof(char)*r*c);    
    for(i=0;i<r;i++)
   {
       for(j=0;j<c;j++)
           {
               scanf("%c",(p+c*i+j));               
           }
   }
  
   for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            printf("%c\t",*(p+c*i+j));
         }
         printf("\n");
    }


   
   for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            if(*(p+c*i+j)=='B');
            B_pos1=i;
            B_pos2=j;
         }
    }
   for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            if(*(p+c*i+j)=='H');
            H_pos1=i;
            H_pos2=j;
         }
    }
   find(p,B_pos1,B_pos2,H_pos1,H_pos2=j);
}
char find(char*p,int B_pos1,int B_pos2,int H_pos1,int H_pos2 )
{

}


有什么思路可以给下写这个find函数嘛?

[ 本帖最后由 longxingxiu 于 2014-5-10 13:59 编辑 ]
搜索更多相关主题的帖子: color 起点 格子 
2014-05-10 13:47
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:3 
可以用回溯的方法,不一定要递归。
2014-05-10 13:50
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
收藏
得分:0 
自己写了一段find函数,为什么输入##BH测试,没有返回呢?我返回函数写错了吗?求砖家帮忙看下


程序代码:
#include <stdio.h> 
#include <stdlib.h>
char find(char*p,int B_pos1,int B_pos2,int c,int r );
void main()
{
   int r,c;int i,j;int B_pos1,B_pos2,H_pos1,H_pos2=0;
   char *p;
   printf("请输入地图的行数和列数,空格隔开:\t");
   scanf("%d%d",&r,&c);getchar();  //----此getchar();  是为了消除前面scanf("%d%d",&r,&c);输入时留下的换行符!
   printf("请输入%d行%d列的地图:\n",r,c);

   p=(char *)malloc(sizeof(char)*r*c);    
    for(i=0;i<r;i++)
   {
       for(j=0;j<c;j++)
           {
               scanf("%c",(p+c*i+j));               
           }
   }
  
   for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            printf("%c\t",*(p+c*i+j));
         }
         printf("\n");
    }


   
   for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            if(*(p+c*i+j)=='B');
            B_pos1=i;
            B_pos2=j;
         }
    }
   for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            if(*(p+c*i+j)=='H');
            H_pos1=i;
            H_pos2=j;
         }
    }
   find(p,B_pos1,B_pos2,c,r);
}
char find(char*p,int B1,int B2,int c,int r )
{
    if(*(p+c*B1+B2-1)=='H'||*(p+c*B1+B2+1)=='H'||*(p+c*(B1-1)+B2)=='H'||*(p+c*(B1+1)+B2)=='H')
    {
        return 'Y';
    }
    else if(*(p+c*B1+B2-1)=='-')//||*(p+c*B1+B2+1)=='-'||*(p+c*(B1-1)+B2)=='-'||*(p+c*(B1+1)+B2)=='-')
         {     B2=B2-1   ;find(p,B1,B2,c,r);}
          if(*(p+c*B1+B2+1)=='-')
          { B2=B2+1; find(p,B1,B2,c,r); }
          if(*(p+c*(B1-1)+B2)=='-')
          {B1=B1-1;find(p,B1,B2,c,r);}
          if(*(p+c*(B1+1)+B2)=='-')
          {B1=B1+1;find(p,B1,B2,c,r);}
          else return 'N';
          
}   
2014-05-12 00:35
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
这个好像是华为编程大赛的题目,话说我就酱油了,
2014-05-12 10:04
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
  for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            if(*(p+c*i+j)=='B');
            B_pos1=i;
            B_pos2=j;
         }
    }
注意这个 if 判断,后面直接分号结束了。因此两条赋值语句总是被执行。
下一段找 "H" 也是一样。

find 函数从思路到语法都有问题。
2014-05-12 10:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:2 
循环
   遍历整个矩阵中的每个项,若其值为B,将其上下左右值为-的值改为B,若遇到H成功结束
   若遍历中,没有任何值被修改,则失败结束

2014-05-12 11:02
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 5 楼 top398
而且if后面要执行多条语句要用{}括起来

总有那身价贱的人给作业贴回复完整的代码
2014-05-12 11:12
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
以下是引用embed_xuel在2014-5-12 11:12:36的发言:

而且if后面要执行多条语句要用{}括起来
这是当然的。
2014-05-12 11:17
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 8 楼 top398
你要不说,楼主肯定不加,还会问你:按照你说的改了,怎么还不行?

总有那身价贱的人给作业贴回复完整的代码
2014-05-12 11:46
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
嗯,这个确实不好说。
2014-05-12 11:58
快速回复:一个问题的编程思路,路过的有什么好的解决思路呢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018619 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved