马走日 (未完成版)

#include<stdio.h>

int d_x[8] = { 2,2,1,1,-2,-2,-1,-1};
int d_y[8] = { 1,-1,2,-2,1,-1,2,-2};
                                     //马行走的八个方向

int c_x = 1;
int c_y = 1;
                                     //当前马的坐标位置

int o_x;
int o_y;
int o_i;
int path[26] = { 1 };
int step = 1;                       //当前步数

int num;
int flag = 0;

int map[5][5] = {
                    { 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, },
               };

int JC(int num);
void Display();

void main()
{
    int i;
    while (step > 0)
    {

for (i = 0; i < 8; i++)
        {
            c_x = c_x + d_x[i];
            c_y = c_y + d_y[i];
            if (c_x < 6 && c_x > 0 && c_y < 6 && c_y > 0)//有效方向
            {
                num = map[c_x - 1][c_y - 1];
                if (JC(num))        //符合条件   
                {
                    step++;
                    path[step] = num;
                    break;
                }
            }
        }
        if (i != 8)
        {
            if (step == 25)
            {
                Display();
            }
            else
            {
                step++;
                path[step] = num;
            }
        }
        else
        {
            
            step--; //应该返回下一个分支。  //应该返回下一个方向而不是下一步 用函数回不回好一点
        }
    }
            
}

void Display()
{
    int i;
    for (i = 1; i < 26; i++)
    {
        printf("Path %d : (%d, %d )\n", i, i, path[i]);
    }
}

int JC(int num)
{

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

原文地址:https://www.cnblogs.com/lux-ace/p/5232103.html

时间: 2024-11-06 07:48:23

马走日 (未完成版)的相关文章

Knight&#39;s Trip---hdu3766(马走日求最小走的步数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3766 给你一个x ,y 求出从(0,0)位置到达需要的最小步数每次只能走日型: 下图为暴力bfs得到的答案:可以看一下: /** 首先,xy的大小排序和转化为都是正数步数不变应该懂吧. y=2*x这种情况直接就是(x+y)/3步. 如果y<2*x但是(x+y)%3==0的话,那么我们可以通过控制(1,2),(2,1) 两种跳法的次数达到...总数必然是(x+y)/3,然后xy的和对3取余是1的话,

002:马走日

002:马走日 题目链接:http://cxsjsxmooc.openjudge.cn/2017t2summerfinal/002/ 总时间限制: 1000ms 内存限制: 1024kB 描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. 输入 第一行为整数T(T < 10),表示测试数据组数.每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,

马走日

马走日 链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1219时间限制: 1000 ms         内存限制: 65536 KB [题目描述] 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. [输入] 第一行为整数T(T < 10),表示测试数据组数. 每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始

Problem L: 搜索基础之马走日

Problem L: 搜索基础之马走日 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 134  Solved: 91[Submit][Status][Web Board] Description 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. Input 第一行为整数T(T < 10),表示测试数据组数.每一组测试数据包含一

马走日的解法(dfs)

马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. Input 第一行为整数T(T < 10),表示测试数据组数. 每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y.(0<=x<=n-1,0<=y<=m-1, m < 10, n < 10) Output 每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径

一本通1219 马走日

[题目描述] 马在中国象棋以日字形规则移动. 请编写一段程序,给定n×m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. [输入] 第一行为整数T(T < 10),表示测试数据组数. 每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y.(0≤x≤n-1,0≤y≤m-1, m < 10, n < 10). [输出] 每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次

4123:马走日

[题目链接] 总时间限制: 1000ms 内存限制: 1024kB 描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. 输入 第一行为整数T(T < 10),表示测试数据组数.每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y.(0<=x<=n-1,0<=y<=m-1, m < 10, n < 10) 输出

马走日 (DFS)

马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. Input第一行为整数T(T < 10),表示测试数据组数. 每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y.(0<=x<=n-1,0<=y<=m-1, m < 10, n < 10)Output每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,

【noi 2.5_8465】马走日(dfs)

最基本的dfs.这代码理应超时的,我也不知为何AC了...... 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 8 int n,m,len; 9 bool vis[15][15]; 10 int dx[8]={1,1,-1,-1,2,2,-2