骑士巡游问题

 /*
 ============================================================================
 Name        : Exercise.c
 Author      : Haier
 Version     : 1.01
 Copyright   : Copyright (c) 2014
 Description : Knight Parade in C, Ansi-style,Compile by Code:Block
 ============================================================================
 */
#include <stdio.h>
#define Order (5)

int Matrix[Order][Order];
int a[8]= {2,1,-1,-2,-2,-1,1,2};  /*(a[],b[])组对,控制方向*/
int b[8]= {1,2,2,1,-1,-2,-2,-1};

/****************************************************************************
* Function     : Print
* Description  : Print result
* Input        : void
* Return       : void
*****************************************************************************/
void Print()
{
    int i,j;

    for(i=0; i<Order; i++)
    {
        for(j=0; j<Order; j++)
        {
            printf("%4d",Matrix[i][j]);
        }

        printf("\n");
    }

    printf("\n");
}
/****************************************************************************
* Function     : Try
* Description  : Recursive lookup the correct position
* Input        : times of recursive,position of x,position of y
* Return       : void
*****************************************************************************/
void Try(int times,int PosOfx,int PosOfy)
{
    int NextPosOfx,NextPosOfy,i;

    for(i=0; i<8; i++)
    {
        NextPosOfx=PosOfx+a[i];
        NextPosOfy=PosOfy+b[i];

        if(NextPosOfx>=0 && NextPosOfx<Order && NextPosOfy>=0 && NextPosOfy<Order)
        {
            if(Matrix[NextPosOfx][NextPosOfy]==0)
            {
                Matrix[NextPosOfx][NextPosOfy]=times;

                if(times<Order*Order)
                {
                    Try(times+1,NextPosOfx,NextPosOfy);
                }
                else
                {
                    Print();
                }
                Matrix[NextPosOfx][NextPosOfy]=0;
            }

        }
    }
}

int main()
{
    int x,y;

    printf("Please input the position of knight: ");
    scanf("%d,%d",&x,&y;

    Matrix[x][y]=1;
    Try(2,x,y);
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值