zoukankan      html  css  js  c++  java
  • poj A Knight's Journey(DFS)

    题目链接:http://acm.hrbust.edu.cn/vj/index.php?c=problem-problem&id=190592

    题意:给出p*q的棋盘,从(A,1)开始,走“日”字,问能否走完棋盘上所有的点,如果能,按字典序输出路径;

    思路:DFS,并保存路径即可,注意处理走的方向顺序int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};

    #include <stdio.h>
    #include <string.h>
    int vis[30][30], ansx[30],ansy[30];
    int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
    int p,q,flag;
    void dfs(int x, int y, int num)
    {
        int i, j;
        ansx[num]=x;
        ansy[num]=y;
        if(num==p*q)
        {
            flag=1;
            return ;
        }
        for(i=0; i<8; i++)
        {
            int xx=x+dir[i][0];
            int yy=y+dir[i][1];
    
            if(xx<=q && xx>=1 && yy<=p && yy>=1 && !vis[xx][yy] && !flag)
            {
                //printf("%d %d
    ",xx,yy);
                //getchar();
                vis[xx][yy]=1;
                dfs(xx,yy,num+1);
                vis[xx][yy]=0;
            }
        }
    }
    int main()
    {
        int t,_case=1;
        scanf("%d",&t);
        while(t--)
        {
            if(_case!=1) printf("
    ");
            printf("Scenario #%d:
    ",_case++);
            scanf("%d%d",&p,&q);
            memset(vis,0,sizeof(vis[0]));
            vis[1][1]=1;
            flag=0;
            dfs(1,1,1);
            if(flag)
            for(int i=1; i<=p*q; i++)
            {
                printf("%c%d",ansx[i]+'A'-1,ansy[i]);
            }
            else printf("impossible");
            printf("
    ");
    
        }
        return 0;
    }
    

      

  • 相关阅读:
    makedown
    前端
    关于阅读与自我认同
    Win10任务栏透明工具 TranslucentTB
    Linux文件属性
    解决vscode出现两个光标的问题
    一文搞懂vim复制粘贴
    解决vim选中文字不能复制的问题
    简单配置让iterm2用得更爽
    区块链相关在线加解密工具(非对称加密/hash)
  • 原文地址:https://www.cnblogs.com/sunshinecyh/p/3980431.html
Copyright © 2011-2022 走看看