程序设计大赛---骑士巡游

2024-01-10 14:32

本文主要是介绍程序设计大赛---骑士巡游,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 给定一个8*8的国际象棋棋盘,在这64个格子中指定一个起点和一个终点,求“马”从起点跳到终点所需的最少次数.

输入:

       输入文件包含多组测试数据,每组数据占一行,包含起点和终点的两个坐标,坐标格式如下:首先是一个字母(a~h)表示所在的列,紧跟着是一个数字(1~8)表示所在的行,两个坐标第一个表示起点,第二个表示终点,中间用一个空格隔开。

输出:

       对于输入文件中每一组数据块,输出一个整数表示从起点到终点要跳的最少次数,每个输出占一行。

输入样本:

e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 f6

输出样本:

2
4
2
6
5
6
1
0

我的程序:

#include<iostream.h>
#include<stdio.h>

int first_en=1;     //判断是否是第一次

//写文件
void mywrite(int count,int first)
{
    FILE *pt;
    pt=fopen("output.txt","a");
    if(first==1)
        fprintf(pt,"%d",count);
    else
        fprintf(pt,"/n%d",count);
    fclose(pt);
}
//清空文件
void clearfile()
{
    FILE *pt;
    pt=fopen("output.txt","w");
    fclose(pt);
}
//回溯算法

void knight(int a[][8],int dir[][2],int n1,int m1,int n2,int m2,int count,int min,int o1,int o2)
{
    if(min>count && a[o1][o2]!=0)
    {
        int i,j;
        int nn,mm;
        if(n1==n2 && m1==m2)   //是否结束
        {
            mywrite(count,first_en);
            first_en=0;        //将第一次标志变为0
            min=count;
            for(i=0;i<8;i++)
            {
                for(j=0;j<8;j++)
                    a[i][j]=0;
            }
        }
        else
        {
            for(i=0;i<8;i++)
            {
                if(min<count)
                    break;
                else
                {
                    nn=n1+dir[i][0];
                    mm=m1+dir[i][1];
                    if(nn>=0 && nn<=7 && mm>=0 && mm<=7 && a[nn][mm]==0 && a[o1][o2]!=0)
                    {
                        a[nn][mm]=1;
                        knight(a,dir,nn,mm,n2,m2,count+1,min,o1,o2);
                        a[nn][mm]=0;
                    }
                }
            }
        }
    }
}


void main()
{
    int a[8][8];
    clearfile();
    FILE *pt;
    char str1[2],str2[2];
    int i,j,min;
    int o1,o2;
    int o3,o4;
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
            a[i][j]=0;
    }
    if(NULL==(pt=fopen("input.txt","r")))
    {
        cout<<"can't open input.txt!"<<endl;
    }
    else
    {
        while(fscanf(pt,"%s",str1)!=EOF)
        {
            fscanf(pt,"%s",str2);
            o1=str1[0]-'a';
            o2=str1[1]-'0'-1;
            o3=str2[0]-'a';
            o4=str2[1]-'0'-1;
            a[o1][o2]=1;
            int dir[8][2]={{-2,-1},{-1,-2},{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1}};
            for(min=1;min<64;min++)
            {
                if(a[o1][o2]==0)
                    break;
                else
                    knight(a,dir,o1,o2,o3,o4,0,min,o1,o2);
            }
        }
       
        fclose(pt);
    }
}

输入:

e3 e4
a2 h8

输出:

3
5

 

这篇关于程序设计大赛---骑士巡游的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/591120

相关文章

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

C语言程序设计(算法的概念及其表示)

一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。 对同一个问题,可有不同的解题方法和步骤。为了有效地进行解题,不仅需要保证算法正确,还要考虑算

全国机器人大赛 Robocon 常州工学院团队首战国三

全国机器人大赛 Robocon 常州工学院团队首战国三 通宵7天7夜,常州工学院RC团队,首次闯入全国机器人大赛国赛,并成功得分! 不同于老牌强队,常州工学院(下面用"常工"代替)的这只队伍,大多数成员由大一组成,核心岗位由一些大二各个专业基础最为扎实的学生担任。 7月7日,19:26分。卡在报道的最后10分钟,由在团队项管和电控成功领队签到,光电Robot成为最近几年唯一一只冲入Roboc

UTON HACK 4.0 黑客马拉松大赛在马来西亚引起巨大反响

自第四届UTON HACK黑客马拉松大赛开启报名以来,吸引了全世界范围内区块链技术精英的广泛参与,在东南亚地区特别是马来西亚引起了巨大反响。 近日,马来西亚主流媒体Delight Media Malaysia对本次黑客马拉松大赛的协办单位马来西亚何氏全球总商会、UM公司进行了专访。 前排左一起是何致呈、何德成、何伟贤、尼克及马克。 (Delight Media Malaysia摄) 马来

1--程序设计的灵魂—算法

一:算法 特定问题求解步骤的描述 在计算机中表现为指令的有限序列 算法是独立存在的一种解决问题的方法和思想 对于算法而言,语言不重要,重要的是思想 二:算法特性 输入:有0个或多个输入 输出:至少一个输出 有穷:有限步骤之后自动结束 确定:每一步都有确定的含义 可行:每一步可行 三:算法设计准则 正确性,可读性,健壮性,高性价比 程序=数据结构+算法 四:影