zoukankan      html  css  js  c++  java
  • TOJ 1702.A Knight's Journey

    2015-06-05

    问题简述:

      有一个 p*q 的棋盘,一个骑士(就是中国象棋里的马)想要走完所有的格子,棋盘横向是 A...Z(其中A开始 p 个),纵向是 1...q。

      原题链接:http://acm.tju.edu.cn/toj/showp1702.html

    解题思路:

      DFS:深搜把所有情况都考虑一遍,当骑士走出棋盘或走到原来走过的格子时,旅行失败了;当骑士能一直走下去直到走过的格子数等于 p*q 时,旅行成功。

      提交过程中一直有一个问题使这个代码一直WA,最后才发现是 p、q输入反了,先输入的数是 q(也就是纵向的数字标号)。。。

    源代码:

     1 /*
     2 OJ: TOJ
     3 ID: 3013216109
     4 TASK: 1702.A Knight's Journey
     5 LANG: C++
     6 NOTE: DFS
     7 */
     8 #include <cstdio>
     9 #include <cstring>
    10 
    11 int n,p,q,flag;
    12 int x[8]={-2,-2,-1,-1,1,1,2,2};
    13 int y[8]={-1,1,-2,2,-2,2,-1,1};
    14 char tmp[27]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
    15 char ans1[27];
    16 int ans2[27];
    17 int visited[35][35];
    18 
    19 bool dfs(int a,int b) {
    20     if(!visited[a][b]) visited[a][b]=1;
    21     else return false;      //如果走到已经走过的棋盘,则失败
    22     ans1[flag]=tmp[a-1];
    23     ans2[flag]=b;
    24     flag++;
    25     if(flag>=p*q) return true; //走完所有的格子,则成功
    26     for(int i=0;i<8;i++) {
    27         if(a+x[i]>0&&a+x[i]<=p&&b+y[i]>0&&b+y[i]<=q&&dfs(a+x[i],b+y[i]))
    28             return true;    //如果下一步不走出棋盘且能走完剩下的格子,则成功
    29     }
    30     visited[a][b]=0;
    31     flag--;            //回溯
    32     return false;        //不能成功的走完所有的格子,则失败
    33 }
    34 
    35 int main()
    36 {
    37     scanf("%d",&n);
    38     int i,j,k=1;
    39     while(n--) {
    40         printf("Scenario #%d:\n",k++);
    41         scanf("%d %d",&q,&p);
    42         flag=0;
    43         memset(visited,0,sizeof(visited));
    44         int solved=0;
    45         for(i=1;i<=p;i++) {
    46             for(j=1;j<=q;j++) { //遍历所有可能的起点
    47                 if(dfs(i,j)) {
    48                     solved=1;
    49                     for(int l=0;l<p*q;l++)
    50                         printf("%c%d",ans1[l],ans2[l]);
    51                     printf("\n\n");
    52                 break;
    53                 }
    54             }
    55         }
    56         if(!solved)
    57             printf("impossible\n\n");
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    -bash java: cannot execute binary file (华为鲲鹏云)
    Centos7.6编译安装数据库mysql5.7.22(华为鲲鹏云服务器案例)
    华为鲲鹏云服务器编译安装mysql-5.7.27 报错error: could not split insn
    centos7.6安装nginx并设置开机自启
    ansible常用模块实例
    Nginx、tomcat日志切割
    Linux系统文件系统损坏修复实例
    Rest模式get,put,post,delete含义与区别(转)
    从关系型数据库到非关系型数据库
    SQL Server 2012 Express LocalDB 的作用
  • 原文地址:https://www.cnblogs.com/ACMans/p/4554204.html
Copyright © 2011-2022 走看看