zoukankan      html  css  js  c++  java
  • gym-101343K-Counting Time

     1 /*
     2 用1-9填满方格,每个数一次,相邻的数的位置也必须相邻
     3 已经填好一些数,求填剩下数的方案数。
     4 直接把剩下的数全排列,然后判断即可
     5 */
     6 #include <bits/stdc++.h>
     7 using namespace std;
     8 bool v[10];
     9 bool vis[5][5];
    10 char ma[5][5];
    11 int cop[5][5];
    12 int arra[10];
    13 int ans=0,cnt=0;
    14 int xy[8][2]={{ -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 0, 1 }, { 1, -1 }, { 1, 0 }, { 1, 1 }};
    15 void mdfs(int x,int y,int n)
    16 {
    17     if(n==9)
    18     {
    19         ans++;
    20         return;
    21     }
    22     for(int i=0;i<8;i++)
    23     {
    24         int dx=x+xy[i][0];
    25         int dy=y+xy[i][1];
    26         if(dx<0||dy<0||dx>=3||dy>=3)
    27             continue;
    28         if(vis[dx][dy])
    29             continue;
    30         if(fabs(cop[x][y]-cop[dx][dy])==1)
    31         {
    32             vis[dx][dy]=1;
    33             mdfs(dx,dy,n+1);
    34             vis[dx][dy]=0;
    35         }
    36     }
    37 }
    38 void ndfs(int n)
    39 {
    40     if(n==cnt)
    41     {
    42         memset(vis,0,sizeof(vis));
    43         int l=0;
    44         int x,y;
    45         for(int i=0;i<3;i++)
    46             for(int j=0;j<3;j++)
    47             {
    48                 if(ma[i][j]==0)
    49                     cop[i][j]=arra[l++];
    50                 else
    51                     cop[i][j]=ma[i][j];
    52                 if(cop[i][j]==1)
    53                 {
    54                     x=i;
    55                     y=j;
    56                 }
    57             }
    58         vis[x][y]=1;
    59         mdfs(x,y,1);
    60         return;
    61     }
    62     for(int i=1;i<10;i++)
    63     {
    64         if(v[i]) continue;
    65         arra[n]=i;
    66         v[i]=1;
    67         ndfs(n+1);
    68         v[i]=0;
    69     }
    70 }
    71 int main()
    72 {
    73     memset(v,0,sizeof(v));
    74     for(int i=0;i<3;i++)
    75         for(int j=0;j<3;j++)
    76         {
    77             char c;
    78             cin>>c;
    79             ma[i][j]=c-'0';
    80             v[ma[i][j]]=1;
    81             if(ma[i][j]==0)
    82                 cnt++;
    83         }
    84         ndfs(0);
    85     cout<<ans<<endl;
    86 }
  • 相关阅读:
    tps,qps
    JS打包与代码分割
    css module
    垃圾回收算法、内存管理
    css flex布局
    angularJS transclude
    JS模块之AMD, CMD, CommonJS、UMD和ES6模块
    js event loop事件循环
    bootstrap3之栅格系统
    viewport理解
  • 原文地址:https://www.cnblogs.com/kearon/p/7215051.html
Copyright © 2011-2022 走看看