1 条题解

  • 0
    @ 2021-6-15 13:05:32

    C :

    #include<stdio.h>
    
    int main()
    {
    	printf("304");
    	return 0;
    }
    

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<cstdlib>
    #include<iomanip>
    using namespace std;
    int u[8]={1,2,2,1,-1,-2,-2,-1},                //8个方向上的x,y增量
        v[8]={-2,-1,1,2,2,1,-1,-2};
    int a[100][100]={0},num=0;                 //记每一步走在棋盘的哪一格和棋盘的每一格有
                                                                //没有被走过
    bool b[100][100]={0};
    int search(int,int,int);                           //以每一格为阶段,在每一阶段中试遍8个方向
    
    int main()
    { 
       a[1][1]=1;b[1][1]=1;                            //从(1,1)第一步开始走
       search(1,1,2);                                    //从(1,1)开始搜第2步该怎样走
       cout<<num<<endl;                            //输出总方案(304)
       return 0;
    }
    int search(int i,int j,int n)
    {
      int k,x,y;                                              //这三个变量一定要定义局部变量
      if (n>25) {num++; return 0;}                  //达到最大规模打印、统计方案
      for (k=0;k<=7;k=k+1)                             //试遍8个方向
       {
         x=i+u[k];y=j+v[k];                            //走此方向,得到的新坐标
         if (x<=5&&x>=1&&y<=5&&y>=1&&(!b[x][y]))
          {                                                    //如果新坐标在棋盘上,并且这一格可以走
             b[x][y]=1; 
             a[x][y]=n;
             search(x,y,n+1);                        //从(x,y)去搜下一步该如何走
             b[x][y]=0;
             a[x][y]=0; 
          }
       }
       return 0;
    }
    
    

    Pascal :

    var
     i:integer;
    begin
     writeln(304);
    end.
    
    • 1

    信息

    ID
    822
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者