• POJ 2488 A Knight's Journey


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

    DFS+回溯,其实不用从所有节点开始搜索,因为要求输出的是字典序,所以只从A1开始搜索,能一次搜到便是存在,否则不存在。写完代码才意识到。另外注意字典序时,方向数组要写对。

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include <stack>
      5 using namespace std;
      6 int c;
      7 int n,p,q;
      8 int start_x,start_y;
      9 int total_count=0;
     10 bool flag=false;
     11 bool visited[30][30]={false};
     12 typedef struct Node {
     13     int x,y;
     14 }Node;
     15 Node nodes[8]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
     16 typedef struct Father {
     17     int x,y;
     18 }Father;
     19 Father father[30][30]={{-1,-1}};
     20 void init()
     21 {
     22     flag=false;
     23     memset(visited,false,sizeof(visited));
     24 }
     25 bool check(int x,int y)
     26 {
     27     if(!(0<=x&&x<p&&0<=y&&y<q))    return false;
     28     return true;
     29 }    
     30 void out_result(int a,int b)
     31 {
     32     stack<int> S;
     33     int x=a,y=b;
     34     printf("Scenario #%d:\n",c);
     35     S.push(b);
     36     S.push(a);
     37     while(!(father[x][y].x==-1&&father[x][y].y==-1)) {
     38         S.push(father[x][y].y);
     39         S.push(father[x][y].x);
     40         int X=father[x][y].x,Y=father[x][y].y;
     41         x=X;
     42         y=Y;
     43     }
     44     while(!S.empty()) {
     45         putchar(S.top()+'A');
     46         S.pop();
     47         putchar(S.top()+'1');
     48         S.pop();
     49     }
     50     putchar('\n');
     51     putchar('\n');
     52 }
     53 void dfs(int x,int y,int count) 
     54 {
     55     if(flag)    return;
     56     if(count==total_count) {
     57         out_result(x,y);
     58         flag=true;
     59         return ;
     60     }
     61     int i;
     62     for(i=0;i<8;i++) {
     63         if(check(x+nodes[i].x,y+nodes[i].y)&&!visited[x+nodes[i].x][y+nodes[i].y]) {
     64             visited[x+nodes[i].x][y+nodes[i].y]=true;
     65             father[x+nodes[i].x][y+nodes[i].y].x=x;
     66             father[x+nodes[i].x][y+nodes[i].y].y=y;
     67             dfs(x+nodes[i].x,y+nodes[i].y,count+1);
     68             visited[x+nodes[i].x][y+nodes[i].y]=false;
     69         }
     70     }
     71 }
     72 int main()
     73 {
     74     scanf("%d",&n);
     75     for(c=1;c<=n;c++) {
     76     here:        scanf("%d%d",&q,&p);
     77         int i,j;
     78         total_count=p*q;
     79         for(i=0;i<p;i++) {
     80             for(j=0;j<q;j++) {
     81                 visited[i][j]=true;
     82                 father[i][j].x=-1;
     83                 father[i][j].y=-1;
     84                 start_x=i;
     85                 start_y=j;
     86                 dfs(start_x,start_y,1);
     87                 if(flag) {
     88                     init();
     89                     c++;
     90                     if(c<=n)
     91                         goto here;
     92                     else return 0;
     93                 }
     94                 init();
     95             }
     96         }
     97         if(!flag) {
     98             printf("Scenario #%d:\n",c);
     99             printf("impossible\n");
    100             putchar('\n');
    101         }
    102     }
    103     return 0;
    104 }
  • 相关阅读:
    Django学习系列之Cookie、Session
    Django学习系列之CSRF
    Django学习系列之Form验证
    Django学习系列之结合ajax
    Logstash学习系列之插件介绍
    Logstash学习系列之基础介绍
    Kubernetes DNS安装配置
    Kubernetes网络配置
    kubernetes节点安装配置
    Kubernetes控制节点安装配置
  • 原文地址:https://www.cnblogs.com/yangce/p/2911272.html
Copyright © 2020-2023  润新知