069.骑士巡游

简介: 069.骑士巡游
//
/*                       骑士巡游问题                                   */
/
#include <stdio.h>
int f[11][11] ;                                /*定义一个矩阵来模拟棋盘*/
int adjm[121][121];/*标志矩阵,即对于上述棋盘,依次进行编号
        1--121(行优先)可以从一个棋盘格i跳到棋盘格j时,adjm[i][j]=1*/
void creatadjm(void);                            /*创建标志矩阵函数声明*/
void mark(int,int,int,int);                     /*将标志矩阵相应位置置1*/
void travel(int,int);                                    /*巡游函数声明*/
int n,m;                                 /*定义矩阵大小及标志矩阵的大小*/
/******************************主函数***********************************/
int main()
{
    int i,j,k,l;
    printf("Please input size of the chessboard: ");  /*输入矩阵的大小值*/
  scanf("%d",&n);
    m=n*n;
    creatadjm();                                         /*创建标志矩阵*/
  puts("The sign matrix is:");
    for(i=1;i<=m;i++)                                /*打印输出标志矩阵*/
    {
        for(j=1;j<=m;j++) 
      printf("%2d",adjm[i][j]);
        printf("\n");
    }
    printf("Please input the knight's position (i,j): "); /*输入骑士的初始位置*/
    scanf("%d %d",&i,&j);
    l=(i-1)*n+j;                   /*骑士当前位置对应的标志矩阵的横坐标*/
    while ((i>0)||(j>0))                             /*对骑士位置的判断*/
    {
        for(i=1;i<=n;i++)                              /*棋盘矩阵初始化*/
            for(j=1;j<=n;j++)
                f[i][j]=0;
        k=0;                                             /*所跳步数计数*/
        travel(l,k);                                /*从i,j出发开始巡游*/
        puts("The travel steps are:");
        for(i=1;i<=n;i++)                      /*巡游完成后输出巡游过程*/
    {
            for(j=1;j<=n;j++) 
          printf("%4d",f[i][j]);
            printf("\n");
    }
        printf("Please input the knight's position (i,j): ");/*为再次巡游输入起始位置*/
      scanf("%d %d",&i,&j);
        l=(i-1)*n+j;
    }
  puts("\n Press any key to quit... ");
  getch();
    return 0;
}
/*****************************创建标志矩阵子函数*************************/
void creatadjm()
{
    int i,j;
    for(i=1;i<=n;i++)                                   /*巡游矩阵初始化*/
        for(j=1;j<=n;j++)
            f[i][j]=0;
    for(i=1;i<=m;i++)                                   /*标志矩阵初始化*/
        for(j=1;j<=m;j++)
            adjm[i][j]=0;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(f[i][j]==0)           /*对所有符合条件的标志矩阵种元素置1*/
      {
                f[i][j]=1;
                if((i+2<=n)&&(j+1<=n)) mark(i,j,i+2,j+1);
                if((i+2<=n)&&(j-1>=1)) mark(i,j,i+2,j-1);
                if((i-2>=1)&&(j+1<=n)) mark(i,j,i-2,j+1);
                if((i-2>=1)&&(j-1>=1)) mark(i,j,i-2,j-1);
                if((j+2<=n)&&(i+1<=n)) mark(i,j,i+1,j+2);
                if((j+2<=n)&&(i-1>=1)) mark(i,j,i-1,j+2);
                if((j-2>=1)&&(i+1<=n)) mark(i,j,i+1,j-2);
                if((j-2>=1)&&(i-1>=1)) mark(i,j,i-1,j-2);
      } 
    return;
}
/*********************************巡游子函数*******************************/
void travel(int p,int r)
{
    int i,j,q;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(f[i][j]>r) f[i][j]=0;              /*棋盘矩阵的置〉r时,置0*/
    r=r+1;                                                   /*跳步计数加1*/
    i=((p-1)/n)+1;                                  /*还原棋盘矩阵的横坐标*/
    j=((p-1)%n)+1;                                  /*还原棋盘矩阵的纵坐标*/
    f[i][j]=r;                              /*将f[i][j]做为第r跳步的目的地*/
    for(q=1;q<=m;q++)           /*从所有可能的情况出发,开始进行试探式巡游*/
  {
        i=((q-1)/n)+1;
        j=((q-1)%n)+1;
        if((adjm[p][q]==1)&&(f[i][j]==0)) 
      travel(q,r);                                    /*递归调用自身*/
    }
    return;
}
/*************************赋值子函数***************************************/
void mark(int i1,int j1,int i2,int j2)
{
    adjm[(i1-1)*n+j1][(i2-1)*n+j2]=1;
    adjm[(i2-1)*n+j2][(i1-1)*n+j1]=1;
    return;
}
相关文章
|
1月前
|
存储 安全 API
威海阿里云代理商:安骑士端口扫描怎么样
简介:@luotuoemo 飞机@TG 【聚搜云】服务器运维专家!威海阿里云代理商:安骑士端口扫描怎么样,阿里云是国内知名云计算服务商,提供多种云计算解决方案,如云服务器、云数据库、云存储等。其安骑士端口扫描功能也备受关注。
|
1月前
|
运维 监控 安全
宿迁阿里云代理商:安骑士漏洞扫描
@luotuoemo 飞机@TG 【聚搜云】服务器运维专家! 宿迁阿里云代理商:安骑士漏洞扫描,高性能与高可靠性:阿里云基于自有技术研发,具备高性能和高可靠性。用户可以根据自身需求选择不同的云产品和规格以满足应用和业务的要求。
|
12月前
|
算法 搜索推荐 Java
骑士周游问题及优化
骑士周游问题及优化
57 0
骑士周游问题及优化
|
云安全 监控 安全
阿里云安全产品之安骑士
阿里云安全产品之安骑士自制脑图, 首先安骑士轻量级的 agent 具有企业级的稳定优势,解决了安全软件普遍对于服务端占比率高,容易对主机运行速度造成影响的问题,常态时,CPU 占用不超过 1%,内存仅有 10 兆,全业务高峰是智能的进行判断识别。
498 0
阿里云安全产品之安骑士
|
存储 人工智能 算法
搜索树及其应用 八树码问题及骑士及过河问题
搜索树及其应用 八树码问题及骑士及过河问题
搜索树及其应用 八树码问题及骑士及过河问题
|
安全 开发者
安骑士基线检查功能介绍 | 学习笔记
快速学习 安骑士基线检查功能介绍
113 0
|
云安全 监控 安全
阿里云安全产品之安骑士|学习笔记
快速学习 阿里云安全产品之安骑士
277 0
|
算法
骑士周游算法
将马随机放在国际象棋的8×8棋盘 将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格
|
弹性计算 运维 监控
阿里云安骑士性能特点与使用场景!
阿里云安骑士是什么?有什么作用?对阿里云云盾产品有一定了解的运维都知道,阿里云安骑士是一款服务器安全运维的管理产品。主要作用可以实时感知云服务器ECS防御和入侵事件,达到实时保障服务器的安全。
1904 0