国际象棋之跳马程序

问题描述:

假设国际象棋棋盘有5*5共25个格子。设计一个程序,使棋子从初始位置(棋盘格编号为1的位置)开始跳马,能够把棋盘的格子全部走一遍,每个格子只允许走一次。要求:

1) 输出一个解(用二维数组来记录马跳的过程,即[步号,棋盘格编号],左上角为第一步起点),2)求总共有多少解

棋盘格编号为:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

分析:简单的DFS。。。

#include <stdio.h>
#include <string.h> 

int path[26],path1[26],res;
int vis[26][26];
int dx[8]={-2,-1,1,2,2,1,-1,-2},dy[8]={-1,-2,2,-1,1,2,2,1};

void DFS(int x,int y,int num,int step){
    if(x<1 || x>5 || y<1 || y>5 || vis[x][y]) //越界或已访问
        return;

    if(step==25){
        res++;
        path1[step]=num;
        for(int i=1;i<=25;i++)
            path[i]=path1[i];
        return;
    }

    if(!vis[x][y]){
        vis[x][y]=1;
        for(int i=0;i<8;i++){
            path1[step]=num;
            DFS(x+dx[i],y+dy[i],(x+dx[i]-1)*5+y+dy[i],step+1);
        }
        vis[x][y]=0;
    }
}

int main(){
    memset(vis,0,sizeof(vis)); //此处可以省略,因为定义全局变量时会被系统赋值为0
    DFS(1,1,1,1);
    printf("解的总个数:%d,其中一个解:\n",res);
    for(int i=1;i<=25;i++)
        printf("[%d,%d]\n",i,path[i]);
    return 0;
}
时间: 2024-12-09 22:46:20

国际象棋之跳马程序的相关文章

009-打印棋盘

# -*- coding:cp936 -*- def chess(): """ 题目:要求输出国际象棋棋盘. 程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格. 注意:print的换行 """ for i in range(0,8): for j in range(0,8): if (i+j)%2 == 0: print 'o', else: print '*', print if (__name__ == '_

人工智能之梦

作者:张江 制造出能够像人类一样思考的机器是科学家们最伟大的梦想之中的一个.用智慧的大脑解读智慧必将成为科学发展的终极. 而验证这样的解读的最有效手段,莫过于再造一个智慧大脑--人工智能(Artificial Intelligence,AI). 人们对人工智能的了解恐怕主要来自于好莱坞的科幻片. 这些荧幕上的机器(见图1-1)要么杀人如麻.如<终结者><黑客帝国>.要么小巧可爱,如<机器人瓦利>.要么多愁善感,如<人工智能>:还有一些则大音希声.大象无形.如

经典C语言程序设计100例 -- C 和 Python 版 (06 - 10)

[06]格式化输出 题目:用*号输出字母C的图案. 思路:可先用'*'号在纸上写出字母C,再分行输出.如果输出图形较大,且有规律可循,可考虑使用循环. C 语言代码 int main() { const char *p = " **** \n" " ** ** \n" "** \n" "** \n" "** \n" " ** ** \n" " **** \n"; pr

从游戏发展史看手游折扣平台选择哪个好

先给出结论,手游折扣平台,判断是否优秀,第一是安全,第二还是安全,第三还是安全. 手游折扣中心 (官网下载),是游戏方集成充值代码,是游戏方自己认可的平台,帐号绝对安全,不会出现小平台的盗号,封号问题. 更重要的是,良心,首续冲都写出来了,而且力度是游戏圈最大的. 更更重要的是,这个平台不是小平台,不是新平台,是2004年就成立的大平台.玩家超过了1亿. 电子游戏的历史跨越了从第一款电子游戏发明到今天的一段时间,涵盖了一个漫长的发明和变化时期.电子游戏在上世纪70年代和80年代达到了主流,当时街

N 皇后问题及跳马问题

废话不多说,先上干货. https://github.com/NeighborhoodWang/algorithm_NQueens_HorseStep/blob/master/N_queens_puzzle.cpp https://github.com/NeighborhoodWang/algorithm_NQueens_HorseStep/blob/master/horse_step.cpp 以下链接是我用C语言写的解决方案,不足之处请多指正. N皇后问题是一个很经典的问题,问题是说在一个N

matlab练习程序(生成黑白网格)

提供了两种生成方法,一个是自己编程实现,比较灵活:另一个是调用系统的checkerboard函数,似乎只能生成8*8网格. 至于用途,也许可以用来下国际象棋. 自己函数生成: 系统函数生成: 代码如下: clear all;close all;clc h=256; w=256; n=8; img=zeros(h,w); flag=1; for y=1:h for x=1:w if flag>0 img(y,x)=255; end if mod(x,int8(w/n))==0 flag=-flag

黑马程序员——经典C语言程序设计100例

1.数字排列 2.奖金分配问题 3.已知条件求解整数 4.输入日期判断第几天 5.输入整数进行排序 6.用*号显示字母C的图案 7.显示特殊图案 8.打印九九口诀 9.输出国际象棋棋盘 10.打印楼梯并按条件打印笑脸 11.经典兔子问题 12.判断素数 13.水仙花数问题 14.正整数分解质因数 15.学习成绩划分 16.正整数求其最大公约数和最小公倍数 17.统计英文字母/空格/数字个数 18.求s=a+aa+aaa+aa...a的值 19.求解"完数" 20.球体自由落下物理问题

UI-Day1____IOS应用程序的生命周期

2015.3.13 //应用程序分类: //ios本地应用程序: 利用iphone软件开发包(SDK)开发的本地应用程序 //web应用程序: 在web中显现的应用程序 //开发环境及工具 //1. xcode :编辑及调试代码文本 //2. interface builder: 可视化UI接口创建工具 //3. instruments : 调试分析应用程序, 分析内存等 //4. simulator : 模拟手机的运行环境 //5. SDK: iphone软件开发包 //开发方式: 手动创建

Python重写C语言程序100例--Part2

'''题目:输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 情况,闰年且输入月份大于3时需考虑多加一天. 2.程序源代码: ''' year = int(raw_input('year:\n')) month = int(raw_input('month:\n')) day = int(raw_input('day:\n')) months = (0,31,59,90,120,151,181,212,24