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;
    }
  • 相关阅读:
    在线教程-Qt参考文档
    利用QT中Qpainter画点,直线,弧线等简单图形
    Office2013下载地址
    Linux下声卡的安装(ALSA)
    聆听自由的声音----Linux下声卡驱动软件ALSA的安装与配置
    linux找回root密码
    删除排序数组中重复的元素【数组专题】
    类模板派生出新的类模板
    TCP的拥塞控制
    linux运行级别
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2512073.html
Copyright © 2011-2022 走看看