zoukankan      html  css  js  c++  java
  • sicily 1152. 简单的马周游问题

    因为矩阵很小,简单的深搜。。可是。。
    有一点不明白,当我的chage数组为change[]={-2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2,-2,-1}的时候就会TLE,深搜的方向不同时间差别这么大吗?
    这个时间复杂度怎么分析? 诚心请教各位大牛为小弟指点迷津。。。
     1 #include<iostream>
     2 #include<memory.h>
     3 using namespace std;
     4 
     5 bool visited[5][6];
     6 int road[30];
     7 int change[]={-1,-2,-2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2};    
     8 
     9 void dfs(int row,int col,int now)
    10 {
    11     visited[row][col]=1;
    12     road[now]=6*row+col+1;
    13     if(now==29) return ;
    14     for(int i=0;i<16;i+=2)
    15     {
    16         int now_row=row+change[i];
    17         int now_col=col+change[i+1];
    18         if(now_row>=0&&now_row<5&&now_col>=0&&now_col<6&&visited[now_row][now_col]==0)
    19         dfs(now_row,now_col,now+1);
    20     }
    21     if(road[now+1]==0)      //待上面那个for循环做完后,仍找不到下一步,说明这步走得不对,要清除,回溯另找路径 
    22     {
    23         visited[row][col]=0;
    24         road[now]=0;
    25     }
    26 }
    27 int main()
    28 {
    29     int N;
    30     while(cin>>N&&N!=-1)
    31     {
    32         int row,col;
    33         int now=0;
    34         row=N/6;
    35         col=N%6-1;
    36         memset(road,0,sizeof(road));
    37         memset(visited,0,sizeof(visited));
    38 
    39         dfs(row,col,now);
    40         for(int i=0;i<30;i++)
    41         {
    42             cout<<road[i];
    43             if(i!=29)   cout<<' ';
    44         }
    45         cout<<endl;
    46     }
    47     return 0;
    48 }    
  • 相关阅读:
    JAVA中内存分配策略里的堆与栈
    Java中间件:淘宝网系统高性能利器
    优化Java堆大小的五个技巧
    Java编程程序异常处理方法
    Java内存管理的九个小技巧
    c++ 函数模板
    c setsockopt设置套接字状态
    c++ typedef 类型重定义语句
    c getaddrinfo函数
    c iovec结构体 readv writev
  • 原文地址:https://www.cnblogs.com/cfhome/p/2693111.html
Copyright © 2011-2022 走看看