#include <stdio.h>
#include <windows.h>
#include <math.h>#pragma warning(disable:4996)#define N (5 * 5)//棋盘大小5 * 5int row[N] = { 0 };//存放行标
int col[N] = { 0 };//存放列标,意思是从(1,1)开始走
int num = 0;//一共有多少种方法void print()
{int i = 0;int a, b;//因为C语言采用的是就近原则,所以这里不用row和col代表行和列,避免产生歧义int arr[5][5] = { 0 };for (i = 0; i < N; i++){//把每个坐标的步数写入二位数组,打印时方便观察a = row[i];b = col[i];arr[a][b] = i + 1;//arr[row[i]][col[i]] = i + 1;//也可以直接这样写}for (a = 0; a < 5; a++){for (b = 0; b < 5; b++){printf("%2d ", arr[a][b]);}printf("\n");}printf("\n");
}int check(int n)
{int i = 0;if ((abs(row[n] - row[n - 1]) == 2 && abs(col[n] - col[n - 1]) == 1) || \(abs(row[n] - row[n - 1]) == 1 && abs(col[n] - col[n - 1]) == 2)){//判断是否走日for (i = 0; i < n; i++){if (row[i] == row[n] && col[i] == col[n]){return 0;//重复走则返回0}}}else{return 0;//不走日则返回0}return 1;//走日且不重复则返回1
}void put(int n)
{int i = 0;int j = 0;if (n < N){for (i = 0; i < 5; i++){row[n] = i;for (j = 0; j < 5; j++){col[n] = j;if (check(n)){put(n + 1);//合适的话走下一步}}}}else{num++;print();//打印出每种方法}
}int main()
{put(1);//从第二步开始,put(0)是第一步printf("一共有%d种方法\n", num);system("pause");return 0;
}

马走日问题,在5*5的棋盘中,马只能走日字。马从位置(0,0)处出发,把棋盘的每一格都走一次,且只走一次。找出所有路径。(C语言实现)相关推荐

  1. 1000瓶药水,1瓶有毒药,几只小白鼠能够找出毒药

    1000瓶药水,1瓶有毒药,服用后一小时毒发,毒药可以无限稀释,那么一小时内用几只小白鼠能够找出毒药? 假如是8瓶药水,3只小白鼠. 000=0 001=1 010=2 011=3 100=4 101 ...

  2. 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

    package demo;import java.util.Arrays;/** 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.*/ //num ...

  3. 找金币问题/只秤一次找出真假金币在哪个箱子

    找金币问题/只秤一次找出真假金币在哪个箱子 问题:在N个箱子里面放有金币,但是只有一个箱子里的金币是真的,其他箱子都是假金币:真金币每个重101克,而假金币则只有100克:你有一个电子秤可以精确称出金 ...

  4. 1000瓶水,1瓶有毒药,几只小白鼠能够找出

    1000瓶水,1瓶有毒药,几只小白鼠能够找出 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒? 这道题考察的是对2进制的 ...

  5. 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 编写一个函数找出这两个只出现一次的数字。

    一个数组中只有两个数字是出现一次,其他所有数字都出现了两次.编写一个函数找出这两个只出现一次的数字. 1.代码编写 2.结果 1.代码编写 代码如下(示例): #define _CRT_SECURE_ ...

  6. linux找出重复数字,C语言笔试经典-查找多位数重复数字以及次数

    从键盘输入一个多位的整数 用程序判断 这个数里面有没有 重复的数字  有重复的数字就打印  哪个数字重复了  重复了几次 例如:输入:1122431 打印结果: 1重复 出现3次 2重复 出现2次, ...

  7. 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标

    34. 在排序数组中查找元素的第一个和最后一个位置 难度中等2012 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target.请你找出给定目标值在数组中的开始位置和结束位置. 如果 ...

  8. 算法:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。(异或符号的妙用)

    异或的性质: 1.交换律 2.结合律(即(a^b)^c == a^(b^c)) 3.对于任何数x,都有x^x=0,x^0=x 4.自反性 A XOR B XOR B = A xor  0 = A 算法 ...

  9. c语言课程设计找出肇事车牌,C语言课程设计报告.doc

    C语言课程设计报告 <C语言程序设计> 课程设计报告 (学年 第 学期) 专 业: 班 级: 姓名学号: 姓 名: 指导教师: 成 绩: 目 录 一.课程设计的目的与要求--------- ...

最新文章

  1. Installshield建立IE快捷方式的方法
  2. CodeChef Cards, bags and coins [DP 泛型背包]
  3. 对gitShell的使用
  4. Json and Go
  5. wxWidgets:wxActiveXEvent类用法
  6. 华为服务器更换主板后怎么进系统,服务器更换主板
  7. concat特征融合_如何理解concat和add的方式融合特征
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的汽车饰品销售系统
  9. zybo上运行linux,Zybo开发板linux作业系统移植
  10. 2016年工作中遇到的问题41-50:Dubbo注册中心奇葩问题,wifi热点坑了
  11. python三十七课_第七课:你知道如何用python做个整蛊朋友的小病毒吗?看这里!七行代码搞定!...
  12. python划分有限元网格_有限元分析网格划分的步骤和类型
  13. 卸载ncurses_linux 安装,卸载 监控服务
  14. python中cv的差值_python+opencv实现移动侦测(帧差法)
  15. win7没有语音识别怎么办|win7系统语音识别设置方法
  16. Redis实现点赞功能
  17. 简易Android专注模式的实现
  18. 软件测试岗月薪3w+的测试,到底强在哪里?测试开发真的就是天花板了吗?
  19. 内网渗透(十七)之内网信息收集-powershell收集域内信息和敏感数据定位
  20. ChatGPT的使用学习笔记

热门文章

  1. 铜陵学院计算机实验考试报告,铜陵学院课程实验报告1(江自信).doc
  2. 从入门到熟悉,Android开发应该如何高效学习?
  3. C++入门之开胃小菜
  4. 从“力拓集团”泄密事件看企业内部信息安全建设
  5. 【热血传奇】 添加npc
  6. 喜欢听着歌写代码的福利(vscode插件)
  7. Ubuntu14.04(indigo)实现RGBDSLAMv2(数据集和实时Kinect)
  8. 怎么为别人提供服务器接口_饭局上领导让你先敬别人怎么办?别说“先干为敬”,这招化解尴尬...
  9. 三叶草生物上市首日破发:累计亏损超过18亿,梁朋父子均为美国籍
  10. C++volatile关键字