zoukankan      html  css  js  c++  java
  • POJ2488 A Knight's Journey dfs搜索

    简单的dfs搜索,题目要求是骑士可以从任意一点出发走完整个棋盘的路径。字典序输出要注意八个方向的排列顺序。

    代码如下:

    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    using namespace std;
    
    int N, M, dir[8][2] = {-2, -1, -2, 1, -1, -2, -1, 2, 1, -2, 1, 2, 2, -1, 2, 1};
    
    int visit[10][10], rec[100][2];
    
    bool judge(int x, int y)
    {
        if (x < 1 || x > M || y < 1 || y > N) {
            return false;
        }
        else {
            return true;
        }
    }
    
    bool dfs(int x, int y, int step)
    {
        rec[step][0] = x, rec[step][1] = y;
        if (step == N*M) {
            for (int i = 1; i <= step; ++i) {
                printf("%c%d", rec[i][0]+'A'-1, rec[i][1]);
            }
            puts("");
            return true;
        }
        for (int i = 0; i < 8; ++i) {
            int xx = x + dir[i][0], yy = y + dir[i][1];
            if (!visit[xx][yy] && judge(xx, yy)) {
                visit[xx][yy] = 1;
                if(dfs(xx, yy, step+1)) {
                    return true;
                }
                visit[xx][yy] = 0;
            }
        }
        return false;
    }
    
    int main()
    {
        int T, step, flag;
        scanf("%d", &T);
        for (int ca = 1; ca <= T; ++ca) {
            memset(visit, 0, sizeof (visit));
            step = flag = 1;
            printf("Scenario #%d:\n", ca);
            scanf("%d %d", &N, &M);
            for (int i = 1; i <= M && flag; ++i) { // 从列优先搜索,因为要求字典序输出
                for (int j = 1; j <= N; ++j) {  // 经测试,只要走1,1这一个点就可以了,也就是说如果有解的话,一定从1,1走起
                    visit[i][j] = 1;
                    if (dfs(i, j, step)) {
                        flag = 0;
                        break;
                    }
                    visit[i][j] = 0;
                }
            }
            
            if (flag) {
                puts("impossible");
            }
            if (ca < T) {
                puts("");
            }
        }
        return 0;
    }
  • 相关阅读:
    使用pipenv管理虚拟环境
    使用cookiecutter创建django项目
    Django中ModelViewSet的应用
    Redis添加历史浏览记录
    Django中配置用Redis做缓存和session
    点击即复制
    PostGreSQL数据库安装配置说明
    IntelliJ IDEA 2017.1.4 x64配置说明
    Struts2之2.5.10.1HelloWorld
    Apache Shiro系列(1)
  • 原文地址:https://www.cnblogs.com/Lyush/p/2588231.html
Copyright © 2011-2022 走看看