8x8骑士周游

/*骑士周游*/
#include<stdio.h>
#include<time.h>
int a[8][8];
int horizontal[8]={2,1,-1,-2,-2,-1,1,2};
int vertical[8]={-1,-2,-2,-1,1,2,2,1};
int currentrow,currentcol;
int ISOK(int n);
int possible();
int output();
void main()
{
        int i,j,isok=0,rand_num1,rand_num2;
        srand((unsigned)time(NULL));
        j=1;
        rand_num1=1;      /*起始行*/
        rand_num2=3;      /*起始列*/
        while(isok==0)
        {
                i=possible();
                if(i<=7)
                {
                        j++;
                        a[currentrow][currentcol]=j;
                }
                if(i>7)
                {      // output();
                      //printf("\n");
                        isok=ISOK(j);
                        if(isok==0)
                        {
                          for(i=0;i<8;i++)
                          {
                             for(j=0;j<8;j++)
                                { a[i][j]=0;}
                          }
                          currentrow=rand_num1;
                          currentcol=rand_num2;
                        j=1;
                        a[currentrow][currentcol]=j;
                        }
                }

        }
        output();
}
int possible(void)
{
        int possible_num,i,j;
//      srand((unsigned)time(NULL));
        possible_num=0;
        while(possible_num<=7)
        {
                possible_num=rand()%8;
//              printf("%d\n",possible_num);
                i=currentrow;
                j=currentcol;
                i+=vertical[possible_num];
                j+=horizontal[possible_num];
                if(i>=0&&i<=7&&j>=0&&j<=7&&a[i][j]==0)
                {
                     currentrow=i;currentcol=j;
                      return possible_num;

                }
                else
                {   for(possible_num=0;possible_num<=7;possible_num++)
                     {
                        i=currentrow;
                        j=currentcol;
                        i+=vertical[possible_num];
                        j+=horizontal[possible_num];
                        if(i>=0&&i<=7&&j>=0&&j<=7)
                        {
                          if(a[i][j]==0)
                           {
                               currentrow=i;currentcol=j;
                                return possible_num;
                           }
                        }
                      }
                      possible_num=8;
                }
        }
        return possible_num;
}

int ISOK(int n)
{
        int i;
        if(n==64)
        {  i=1;return i;}
        else return i=0;
}
int output(void)
{
        int i,j;
        for(i=0;i<8;i++)
        {
                for(j=0;j<8;j++)
                {
                   printf("%3d",a[i][j]);
                }
                printf("\n");
        }
}


 

你可能感兴趣的:(8x8骑士周游)