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

    题目链接

    典型的DFS题,骑士周游问题。

    这题的关键在于字典序输出路径,要处理好搜索的顺序,另外需要注意的是,字母表示行,数字表示列。

    View Code
     1 #include <stdio.h>
     2 #include <memory.h>
     3 #define N 26
     4 int dx[8]={-2,-2,-1,-1,1,1,2,2};
     5 int dy[8]={-1,1,-2,2,-2,2,-1,1};
     6 char vis[N][N],ok;
     7 int n,m;
     8 int ans[N];
     9 void dfs(int i,int j,int cnt)
    10 {
    11   int ni,nj,k;
    12   ans[cnt]=i*m+j;
    13   if(cnt+1==n*m&&!ok)
    14   {
    15     for(k=0;k<=cnt;k++) printf("%c%d",'A'+ans[k]/m,ans[k]%m+1);
    16     ok=1;
    17     printf("\n\n");
    18     return;
    19   }
    20   for(k=0;k<8;k++)
    21   {
    22     ni=i+dx[k],nj=j+dy[k];
    23     if(ni<0 || nj<0 || ni>=n || nj>=m || vis[ni][nj]) continue;
    24     vis[ni][nj]=1;
    25     dfs(ni,nj,cnt+1);
    26     vis[ni][nj]=0;
    27   }
    28 }
    29 int main()
    30 {
    31   int t,kase=0,i,j;
    32   scanf("%d",&t);
    33   while(t--)
    34   {
    35     scanf("%d%d",&m,&n);
    36     printf("Scenario #%d:\n",++kase);
    37     if(n*m==1){puts("A1\n");continue;}
    38     ok=0;
    39     memset(vis,0,sizeof(vis));
    40     vis[0][0]=1;
    41     dfs(0,0,0);
    42     if(!ok) puts("impossible\n");
    43   }
    44   return 0;
    45 }
  • 相关阅读:
    刷题笔记
    布隆过滤器
    单例模式,堆,BST,AVL树,红黑树
    B树、B-树、B+树、B*树【转】,mysql索引
    数据结构与算法80道
    海量数据处理【转】
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
  • 原文地址:https://www.cnblogs.com/algorithms/p/2470144.html
Copyright © 2011-2022 走看看