马踏棋盘问题

2016-02-19 13:27 8 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的马踏棋盘问题教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

#include stdio.h
  #define N 5
  void main(){
   int x,y;
   void horse(int i,int j);
   printf("Please input start position:");
   scanf("%d%d",&x,&y);
   horse(x-1,y-1);
  }
  void horse(int i,int j){
   int a[N][N]={0},start=0,
    h[]={1,2,2,1,-1,-2,-2,-1},
    v[]={2,1,-1,-2,2,1,-1,-2},
    save[N*N]={0},posnum=0,ti,tj,count=0;
   int jump(int i,int j,int a[N][N]);
   void outplan(int a[N][N]);
   a[i][j]=posnum+1;
   while(posnum=0){
    ti=i;tj=j;
    for(start=save[posnum];start8;++start){
     ti+=h[start];tj+=v[start];
     if(jump(ti,tj,a))
      break;
     ti-=h[start];tj-=v[start];
    }
    if(start8){
     save[posnum]=start;
     a[ti][tj]=++posnum+1;
     i=ti;j=tj;save[posnum]=0;
     if(posnum==N*N-1){
      //outplan(a);
      count++;
     }
    }
    else{
     a[i][j]=0;
     posnum--;
     i-=h[save[posnum>;j-=v[save[posnum>;
     save[posnum]++;
    }
   }
   printf("%5d",count);
  }
  int jump(int i,int j,int a[N][N]){
   if(iN&&i=0&&jN&&j=0&&a[i][j]==0)
    return 1;
   return 0;
  }
  void outplan(int a[N][N]){
   int i,j;
   for(i=0;iN;i++){
    for(j=0;jN;j++)
     printf("%3d",a[i][j]);
    printf("");
   }
   printf("");
   //getchar();
  }
  用回溯法得到所有的解,但效率较低,只能算出5行5列的。

来源:http://www.tulaoshi.com/n/20160219/1604368.html

延伸阅读
怎么解决win7虚拟机无法识别U盘问题   1、首先运行虚拟机,然后依次点击查看工具栏--VM--Settings--Hardware,然后检查下Device栏目中有没有USB Controller,如果没有ADD的话那么就添加一个,有的话就继续点击它,然后查看右边是否都全部勾选,如下图所示; 2、如果看到第三项是灰色无法勾选的话,原因是因为USB的端口不够用...
12招带你去踏秋   在北半球,我们已经迎来了秋季。这意味着我们将迎来一个充满红色、橙色和黄色的世界。这是拿起相机tulaoshi.com出去记录美好世界的最佳时刻之一。下面是一些小建议,帮助你更好地用照片来展现这个丰收季节的丰富多彩。 1. 靠近 一两片树叶。只是一两片。一叶知秋,这已经足够展示这个季节的美丽了。尽...
标签: 产后 妈妈 孕妇
产后妈妈勿踏十雷区 生完宝宝后,身体虚弱的新妈妈需要补充营养,以尽快恢复。但是,恢复的过程不能操之过急,否则很容易犯下面的错误。 坐月子时,最容易犯哪些饮食上的错误呢? 1.过早大量喝汤 分娩后家里人少不了给产妇炖一些营养丰富的汤,如鲫鱼汤、猪蹄汤、排骨汤等,认为这样可以补充营养,...
标签: PS PS教程
今天我们用 Photoshop来制作一个木制围棋棋盘和棋子。 制作步骤: 设计准备、绘制木纹棋盘、棋盘网格绘制、棋子绘制和效果渲染。 制作思路: 本实例首先用了滤镜,用“纹理”中的“颗料”滤镜、“模糊”中的“动感模糊”来生成直线木纹,然后使用“色相 / 饱和度”将木纹的颜色进行调整,使之与现实中真实的木纹颜...
32位win7系统开机提示windows检测到一个硬盘问题   故障图: 1、首先鼠标右击电脑桌面上的计算机图标选择管理选项; 2、然后在弹出来的管理界面中,展开左侧的任务计划程序-任务计划程序库--windows--DitulaoShi.comskdiagnostic项; 3、接着在右边窗口中找到microsoft-windows-diskdiagnosticdatacollector和m...

经验教程

200

收藏

10
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部