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)
输出
每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。
样例输入
1
5 4 0 0
样例输出
32
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 int sx[8]={1,1,-1,-1,2,2,-2,-2};
 6 int sy[8]={2,-2,2,-2,1,-1,1,-1};
 7 int t,n,m,x,y,ans;
 8 bool b[20][20];
 9 void dfs(int dep,int s,int t)
10 {
11     if(dep==n*m)
12     {  ans++; return; }
13     for (int r=0;r<8;++r)
14     {
15         int x=s+sx[r]; int y=t+sy[r];
16         if (!b[x][y]&&x>0&&y>0&&x<=n&&y<=m)
17         {
18             b[x][y]=true;
19             dfs(dep+1,x,y);
20             b[x][y]=false;
21         }
22     }
23 }
24 int main()
25 {
26     scanf("%d",&t);
27     while (t--)
28     {
29         scanf("%d%d",&n,&m);
30         scanf("%d%d",&x,&y);
31         ++x; ++y;
32         memset(b,0,sizeof(b));
33         ans=0,b[x][y]=true;
34         dfs(1,x,y);
35         printf("%d\n",ans);
36     }
37 }  
时间: 2024-10-07 02:30:03

4123:马走日的相关文章

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为无法遍历一次

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

马走日 (未完成版)

#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