| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 332 人关注过本帖
标题:马的遍历问题
收藏  订阅  推荐  打印 
半神传说
Rank: 1
等级:新手上路
帖子:3
积分:130
注册:2008-9-18
马的遍历问题

最近接触到马的遍历问题,感觉很难,希望能得到分别用贪婪和回朔法编写的代码,谢谢了
搜索更多相关主题的帖子: 遍历  
2008-9-18 20:29
liyanhong
Rank: 3Rank: 3
来自:水星
等级:中级会员
威望:8
帖子:1865
积分:4530
注册:2008-5-3
复制给你了

#include<stdio.h>
#define N 8
struct nx
{
   int m;
   int n;   
};
int array[9][9];
int count;
void format(void)
{
   int line;
   int posi;
   for(line=1;line<=8;line++)
   {
      for(posi=1;posi<=8;posi++)
      {
         array[line][posi]=0;
      }
   }
}

struct nx jump_horse(int direct,int x,int y)
{
   struct nx next;
   switch(direct)
   {
      case 1: next.m=x+2;next.n=y+1;break;
      case 2: next.m=x+2;next.n=y-1;break;
      case 3: next.m=x+1;next.n=y-2;break;
      case 4: next.m=x-1;next.n=y-2;break;
      case 5: next.m=x-2;next.n=y-1;break;
      case 6: next.m=x-2;next.n=y+1;break;
      case 7: next.m=x-1;next.n=y+2;break;
      case 0: next.m=x+1;next.n=y+2;break;
   }
   return next;
}

int can_put_here(int deepth,int m,int n)
{
   if(n>N||m>N||n<1||m<1||array[m][n]!=0)
     return 0;
   else
      return 1;
}

void list_result(void)
{
   int line;
   int posi;
   for(line=1;line<=N;line++)
   {
      for(posi=1;posi<=N;posi++)
      {
         printf("%3d",array[line][posi]);
      }
       printf("\n");
   }
   printf("\n");
}

void horse_track(int deepth,int x,int y)
{
   int direct1;
   struct nx next;
   if(deepth>N*N)
   {
      list_result();
      array[x][y]=0;
      count++;/*看有多少種走法*/
   }
   else
   {
      for(direct1=0;direct1<=7;direct1++)
      {
        next=jump_horse(direct1,x,y);
        if(can_put_here(deepth,next.m,next.n))
        {
           array[next.m][next.n]=deepth;
           horse_track(deepth+1,next.m,next.n);
        }
     }
     if(direct1==8)
       array[x][y]=0;
   }
}

main()
{
   int startx;
   int starty;
   format();
   printf("Please input the start position(x,y):");
   scanf("%d%d",&startx,&starty);
   array[startx][starty]=1;
   count=0;
   horse_track(2,startx,starty);
   printf("%d",count);
}

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-9-18 20:31
半神传说
Rank: 1
等级:新手上路
帖子:3
积分:130
注册:2008-9-18

谢谢了哦,好快啊
2008-9-18 20:41
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

马的遍历可以贪婪????

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-9-18 21:17
卧龙孔明
Rank: 12Rank: 12Rank: 12
等级:版主
威望:47
帖子:3705
积分:39096
注册:2006-10-13

StarWing83 在 2008-9-18 21:17 的发言:

马的遍历可以贪婪????
马的遍历(周游)就是贪心嘛...

为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!
2008-9-19 12:42
卧龙孔明
Rank: 12Rank: 12Rank: 12
等级:版主
威望:47
帖子:3705
积分:39096
注册:2006-10-13

当然,也可以去找一个环...然后直接调整次序输出答案...
不过贪心算法已经足够快了

为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!
2008-9-19 12:43
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

马的遍历?我好像没看过……是求什么的?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-9-19 13:09
广陵绝唱
Rank: 4
等级:高级会员
威望:1
帖子:832
积分:9811
注册:2008-2-15
回复 7# StarWing83 的帖子

是参照象棋中马的行走规距,象棋中,“马走日”。
http://zhidao.baidu.com/question/5203036.html
http://topic.csdn.net/t/20060618/17/4828474.html
2008-9-20 01:18
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.067721 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved