zoukankan      html  css  js  c++  java
  • 深度搜索省赛题

     题目大意:象棋里的马遍历所有的点,且每个点走一次,求总共有多少种走法,棋盘上刚开始还有障碍点(导致马在某些方向上不能跳)

    解:深搜

    易错点:还原状态;

            当遍历成功时没能及时还原visited【】【】;其实可以把visited的负值与还原改成注释部分那样,这样更清晰且不易错;

               思路不清:一定是在理清思路后再做!

               main()函数里 忘掉return 0;

    #include<iostream>
    using namespace std;
    int m,n,t;
    int sum=0;
    int dir[8][2]=
    {
       {-2,-1} ,{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}
    };
    int visited[7][7];
    int map[7][7];
    int deep(int x,int y,int flag)
    {
       flag++;
       visited[x][y]=1;
       if(flag==m*n-t)
       {
           visited[x][y]=0;
           sum++;
           return true;
       }
       int i;
       for(i=0;i<8;i++)
       {
           int s,t;
           switch(i/2)
           {
                  case 0: s=x-1;t=y;break;
               case 1: s=x;t=y+1;break;
               case 2: s=x+1;t=y;break;
               case 3: s=x;t=y-1;break;
           }
           if(map[s][t]==1)continue;
           int p=dir[i][0]+x;
           int q=dir[i][1]+y;
           if(p>0&&p<=m&&q>0&&q<=n&&map[p][q]==0&&visited[p][q]==0)
           {
              // visited[p][q]=1;
              // flag++;
               deep(p,q,flag);
              // flag--;
              // visited[p][q]=0;
    
           }
    
       }
       visited[x][y]=0;
       return false;
    }
    int main()
    {
        int flag=0;
        while(cin>>m>>n>>t)
        {
            memset(visited,0,sizeof(visited));
            sum=0;
            memset(map,0,sizeof(map));
            if(t==-1)
                break;
            int i;
            int x,y;
            for(i=0;i<t;i++)
            {
                cin>>x>>y;
                map[x][y]=1;
                visited[x][y]=1;
            }
            
            //visited[1][1]=1;
            deep(1,1,0);
            cout<<sum<<endl;
    
    
        }
        return 0;
    }
  • 相关阅读:
    core--线程同步(用户模式)
    Android-Kotlin-Activity直接的跳转
    Android-Kotlin-枚举enum
    Android-Kotlin-单例模式
    Android-Kotlin-代理和委托
    Android-Kotlin-接口与多态的表现
    Android-Kotlin-set/get方法的使用
    Android-Kotlin-继承
    Android-Kotlin简单计算器功能
    CentOS 6.5 X64 U盘启动盘制作
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2512073.html
Copyright © 2011-2022 走看看