Problem L: 搜索基础之马走日

Problem L: 搜索基础之马走日

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 134  Solved: 91
[Submit][Status][Web Board]

Description

马在中国象棋以日字形规则移动。

请编写一段程序,给定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

每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。

Sample Input

1
5 4 0 0

Sample Output

32
#include<stdio.h>
#include<string.h>
int dx[9]={0,1,1,-1,-1,2,2,-2,-2};
int dy[9]={0,2,-2,2,-2,-1,1,1,-1};
int a[111][111];
int t,n,m,x,y,step,sum;

int dfs(int x,int y,int step)
{
    int l;
    if(step>=m*n)
    {
        sum++;
        return 0;
    }
    for(l=1;l<=8;l++)
    {
        int x1=x+dx[l];int y1=y+dy[l];
        if(x1<n&&y1<m&&x1>=0&&y1>=0&&a[x1][y1]==0)
        {
            a[x1][y1]=1;
            dfs(x1,y1,step+1);
            a[x1][y1]=0;
        }
    }
}
int main()
{
    int i;
    scanf("%d",&t);
    for(i=1;i<=t;i++)
    {
        scanf("%d%d%d%d",&n,&m,&x,&y);
        a[x][y]=1;
        dfs(x,y,1);
        printf("%d\n",sum);
        memset(a,0,sizeof(a));
        sum=0;
    }
}

  

原文地址:https://www.cnblogs.com/mjn1/p/8970749.html

时间: 2024-10-10 09:01:39

Problem L: 搜索基础之马走日的相关文章

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),表示测试数据组数. 每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始

马走日的解法(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为无法遍历一次

马走日 (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每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,

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) 输出

马走日 (未完成版)

#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] =

【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