马踏棋盘

来源:互联网 发布:淘宝美工多少钱一个月 编辑:程序博客网 时间:2024/04/30 21:46

 问题描述:

 给一个5*5的国际象棋棋盘,国际象棋的马同样是走“日”字,如图:
 然后:问,如果一个马,从第一个格子开始走,那么走遍整个5*5的棋盘的方案,有多少种?并且输出方案数
   

描述:可能是因为看到的是别人写的,自己没有认真思考,这样学习效果不好,看一道题,必须想自己思考,先自己去想思路,然后再借鉴,要不容易思维受限制。



先附上程序

#include <iostream>
#include <cstdio>
using namespace std;
int cnt=0;
int vis[5][5];
void print()
{
    printf("case #%d:\n",++cnt);
    for(int i=0;i<5;i++)
      {
          for(int j=0;j<4;j++)
             printf("%4d",vis[i][j]);
           printf("%4d\n",vis[i][4]);  //每四个换行
      }
      printf("\n");
}
inline bool inbound(int x,int l,int r)
{
     return l<=x&&x<r;
}
void dfs(int x,int y,int n)
{
       if(vis[x][y]==0 && inbound(x,0,5) && inbound(y,0,5)
          && n<=25)
          {


                 vis[x][y]=n;
                 n++;
                 if(n>25)
                    print();
                dfs(x+1,y+2,n);
                dfs(x+1,y-2,n);
                dfs(x-1,y+2,n);
                dfs(x-1,y-2,n);
                dfs(x+2,y+1,n);
                dfs(x+2,y-1,n);
                dfs(x-2,y+1,n);
                dfs(x-2,y-1,n);
                vis[x][y]=0;
          }
          else return;
}


int main()
{


    dfs(0,0,1);
    return 0;
}

0 0
原创粉丝点击