Java教程

【POJ】2488 A Knight‘s Journey

本文主要是介绍【POJ】2488 A Knight‘s Journey,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在这里插入图片描述
因为需要输出完整的访问路径,因此采用DFS比较好,注意因为题目要求按照字典序输出,因此direction数组只能有一种构造方式:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>

using namespace std;

int direction[8][2] = {
        {-1, -2}, {1, -2}, {-2, -1}, {2, -1}, {-2, 1}, {2, 1}, {-1, 2}, {1, 2}
};

const int N = 30;

bool visited[N][N];
int p, q;

bool DFS(int x, int y, int step, string ans){
    if(step == p * q){
        cout<<ans<<endl<<endl;
        return true;
    }
    for(int i = 0;i < 8;i++){
        int nx = x + direction[i][0];
        int ny = y + direction[i][1];
        if(nx < 0 || nx >= p || ny < 0 || ny >= q || visited[nx][ny]) continue;
        visited[nx][ny] = true;
        char col = ny + 'A';
        char row = nx + '1';
        if(DFS(nx, ny, step + 1, ans + col + row)) return true;
        visited[nx][ny] = false;
    }
    return false;
}

int main(){
    int n;
    scanf("%d", &n);
    for(int i = 0;i < n;i++){
        scanf("%d%d", &p, &q);
        printf("Scenario #%d:\n", i + 1);
        memset(visited, false, sizeof(visited));
        visited[0][0] = true;
        if(!DFS(0, 0, 1, "A1")) printf("impossible\n\n");
    }
    return 0;
}
这篇关于【POJ】2488 A Knight‘s Journey的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!