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

    http://poj.org/problem?id=2488

    题意:给定一个row*col 的棋盘,列上用字母A,B,C······ 表示,行上用数字1,2,3······表示,问马是否能走遍整个棋盘,并将走的路径按字典序顺序输出。

    思路:只要按照dir[8][2] = {{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};这个方向搜索,得出的路径即按字典序输出的。

     1 #include <stdio.h>
     2 #include <string.h>
     3 char s[520];
     4 int row,col,flag;
     5 int vis[120][120];
     6 int dir[8][2] = {{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
     7                  //必须按这个方向搜索
     8 struct node
     9 {
    10     char  x;
    11     char   y;
    12 } g[520];//储存路径
    13 void dfs(int x,int y,int step)
    14 {
    15     if (step==row*col)
    16     {
    17         flag = 1;
    18         return ;
    19     }
    20     for (int i = 0; i < 8; i ++)
    21     {
    22         int dx = x+dir[i][0];
    23         int dy = y+dir[i][1];
    24         if (dx >= 1 && dx <= col && dy >= 1 && dy <= row && !vis[dx][dy])
    25         {
    26 
    27             g[step].x = dx +'A'-1;
    28             g[step].y = dy + '0';
    29             vis[dx][dy] = 1;
    30             dfs(dx,dy,step+1);
    31             if (flag)
    32                 return ;
    33             vis[dx][dy]  = 0;
    34         }
    35     }
    36 }
    37 void init()
    38 {
    39     memset(vis,0,sizeof(vis));
    40     g[0].x = 'A';
    41     g[0].y = '1';
    42     vis[1][1] = 1;
    43     flag = 0;
    44 }
    45 int main()
    46 {
    47     int t;
    48     scanf("%d",&t);
    49     for (int i = 1; i <= t; i ++)
    50     {
    51         init();
    52         scanf("%d%d",&row,&col);
    53         dfs(1,1,1);
    54         printf("Scenario #%d:
    ",i);
    55         if (flag)
    56         {
    57             for (int j = 0; j < row*col; j ++)
    58                 printf("%c%c",g[j].x,g[j].y);
    59             puts("");
    60         }
    61         else
    62             printf("impossible
    ");
    63         puts("");
    64     }
    65     return 0;
    66 }
    View Code
  • 相关阅读:
    mysql练习题
    转 -day19--form&modelform
    day20--注册功能及首页
    day19-form表单&auth模块、项目初识
    day15-pymysql模块的使用
    第14天jquery+bootstrap
    第13天-js+jquery
    iTween基础之Punch(摇晃)
    iTween基础之Audio(音量和音调的变化)
    iTween基础之Rotate(旋转角度)
  • 原文地址:https://www.cnblogs.com/lahblogs/p/3290602.html
Copyright © 2011-2022 走看看