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

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

    题意:

    给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<stack>
     6 #include<queue>
     7 #include<iomanip>
     8 #include<cmath>
     9 #include<map>
    10 #include<vector>
    11 #include<algorithm>
    12 using namespace std;
    13 
    14 struct node
    15 {
    16     int x,y;
    17 }q[30]; //记录路径
    18 int p,c;
    19 int vis[300][30];
    20 int d[10][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};//顺序很重要,不能改变
    21 int dfs(int i,int j,int step)
    22 {
    23     vis[i][j]=1;
    24     q[step].x=i;
    25     q[step].y=j;
    26     if(step==p*c) return 1;
    27     for(int k=0; k<8; k++)
    28     {
    29         int a=i+d[k][0];
    30         int b=j+d[k][1];
    31         if(!vis[a][b]&&a>=1&&a<=p&&b>=1&&b<=c)
    32         if(dfs(a,b,step+1))
    33         return 1;
    34     }
    35     vis[i][j]=0;
    36     return 0;
    37 }
    38 int main()
    39 {
    40     int t,i;
    41     cin>>t;
    42     for(i=1; i<=t; i++)
    43     {
    44         memset(vis,0,sizeof(vis));
    45         cin>>p>>c;
    46         printf("Scenario #%d:
    ",i);
    47         if(dfs(1,1,1))
    48         {
    49             for(int j=1; j<=p*c; j++)
    50             printf("%c%d",q[j].y+64,q[j].x);
    51             cout<<endl<<endl;
    52         }
    53         else
    54         cout<<"impossible"<<endl<<endl;
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    jqueryui 进度条使用
    第一阶段站立会议03
    第一阶段站立会议02
    第一阶段站立会议01
    找到了——电梯会议
    软件需求规格说明书
    团队项目计划会议
    软件开发团队简介
    找水王
    NABCD需求分析
  • 原文地址:https://www.cnblogs.com/bfshm/p/3285284.html
Copyright © 2011-2022 走看看