马走日

GitHub跳转原题关系图返回列表

题意与原解析均从本地 OpenJudge 缓存迁移。

OJ: noi_openjudge

题目 ID: ch0205-8465

难度:未知

标签:

日期: 2026-07-30 23:01

题意

完整题面见同目录的 problem.md

思路

代码

cpp
#include <bits/stdc++.h>
using namespace std;

int n,m,sx,sy;
int cnt ;
bool vis[305][305];

int fx[][2] = { {2,-1}, {2,1}, {-2,1}, {-2,-1}, {1,2}, {1,-2}, {-1,2}, {-1,-2} };

void init(){
    cnt = 0;
    scanf("%d%d%d%d",&n,&m,&sx,&sy);
    sx++;
    sy++;
    memset(vis,0,sizeof(vis));
}

bool in_map(int x,int y){
    if(x >=1 && x <= n&& y >=1 && y <= m)
        return 1;
    return 0;
 }

void  dfs(int x,int y,int dep){
    if( dep == n*m){
        cnt++;
        return;
    }

    vis[x][y] = 1;

    int i;
    for (i=0;i<8;i++){
        int nx = x + fx[i][0];
        int ny = y + fx[i][1];
        if( in_map(nx, ny) && !vis[nx][ny]){
            dfs(nx,ny,dep+1);
            vis[nx][ny] = 0;
        }
    }
}


int main(){
    int T;
    scanf("%d",&T);
    while (T--) {
        init();
        dfs(sx,sy,1);
        printf("%d\n",cnt);
    }
    return 0;
}

复杂度

总结