• UVALive 4763


    一开始,没敢写,感觉会超时。。。其实就是暴力搜索。DFS

      1 #include<iostream>
      2 #include<stdio.h>
      3 #include<string.h>
      4 #include<cmath>
      5 #include<algorithm>
      6 #include<queue>
      7 #define clc(a,b) memset(a,b,sizeof(a))
      8 #define N 100
      9 #define eps 1e-6
     10 #include<stack>
     11 #include<deque>
     12 #include<vector>
     13 using namespace std;
     14 const int  MAXD = 1e5+10;
     15 const int  MAXM = 51;
     16 const int  INF = 0x3f3f3f3f;
     17 typedef long long ll;
     18 
     19 char G[10][10];
     20 int  row[10][10],coloum[10][10],cr[10][10],row1[26];
     21 int t;
     22 int sum;
     23 void dfs(int x,int y)
     24 {
     25     if(x==9)
     26     {
     27         sum++;
     28         return;
     29     }
     30     if(G[x][y]>='1'&&G[x][y]<='9')
     31     {
     32         if(y==8)
     33             dfs(x+1,0);
     34         else
     35             dfs(x,y+1);
     36         return ;
     37     }
     38     else if(G[x][y]=='e')
     39     {
     40         int flag=0;
     41         for(int i=2; i<10; i=i+2)
     42         {
     43             if(!row[x][i]&&!coloum[y][i]&&!cr[(x/3)*3+y/3+1][i])
     44             {
     45                 flag=1;
     46                 G[x][y]=i+'0';
     47                 row[x][i]=1;
     48                 coloum[y][i]=1;
     49                 cr[(x/3)*3+y/3+1][i]=1;
     50                 if(y==8)
     51                     dfs(x+1,0);
     52                 else
     53                     dfs(x,y+1);
     54                 G[x][y]='e';
     55                 row[x][i]=0;
     56                 coloum[y][i]=0;
     57                 cr[(x/3)*3+y/3+1][i]=0;
     58             }
     59         }
     60         if(!flag)
     61             return;
     62     }
     63     else if(G[x][y]=='o')
     64     {
     65         int flag=0;
     66         for(int i=1; i<=9; i=i+2)
     67         {
     68             if(!row[x][i]&&!coloum[y][i]&&!cr[(x/3)*3+y/3+1][i])
     69             {
     70                 flag=1;
     71                 G[x][y]=i+'0';
     72                 row[x][i]=1;
     73                 coloum[y][i]=1;
     74                 cr[(x/3)*3+y/3+1][i]=1;
     75                 if(y==8)
     76                     dfs(x+1,0);
     77                 else
     78                     dfs(x,y+1);
     79                 G[x][y]='o';
     80                 row[x][i]=0;
     81                 coloum[y][i]=0;
     82                 cr[(x/3)*3+y/3+1][i]=0;
     83             }
     84         }
     85         if(!flag)
     86             return ;
     87     }
     88     else if(G[x][y]>='a'&&G[x][y]<='z'&&G[x][y]!='e'&&G[x][y]!='o')
     89     {
     90         int num=G[x][y]-'a';
     91         if(row1[num])
     92         {
     93             if(!row[x][row1[num]]&&!coloum[y][row1[num]]&&!cr[(x/3)*3+y/3+1][row1[num]])
     94             {
     95                 G[x][y]=row1[num]+'0';
     96                 row[x][row1[num]]=1;
     97                 coloum[y][row1[num]]=1;
     98                 cr[(x/3)*3+y/3+1][row1[num]]=1;
     99                 if(y==8)
    100                     dfs(x+1,0);
    101                 else
    102                     dfs(x,y+1);
    103                 G[x][y]=num+'a';
    104                 row[x][row1[num]]=0;
    105                 coloum[y][row1[num]]=0;
    106                 cr[(x/3)*3+y/3+1][row1[num]]=0;
    107             }
    108             else
    109                 return ;
    110         }
    111         else
    112         {
    113             int flag=0;
    114             for(int i=1; i<=9; i++)
    115             {
    116                 if(row[x][i]==0&&coloum[y][i]==0&&cr[(x/3)*3+y/3+1][i]==0)
    117                 {
    118                     flag=1;
    119                     row1[num]=i;
    120                     G[x][y]=i+'0';
    121                     row[x][i]=1;
    122                     coloum[y][i]=1;
    123                     cr[(x/3)*3+y/3+1][i]=1;
    124                     if(y==8)
    125                         dfs(x+1,0);
    126                     else
    127                         dfs(x,y+1);
    128                     G[x][y]=num+'a';
    129                     row1[num]=0;
    130                     row[x][i]=0;
    131                     coloum[y][i]=0;
    132                     cr[(x/3)*3+y/3+1][i]=0;
    133                 }
    134             }
    135             if(flag==0)
    136                 return ;
    137         }
    138     }
    139     else if(G[x][y]=='0')
    140     {
    141         int flag=0;
    142         for(int i=1; i<=9; i++)
    143         {
    144             if(!row[x][i]&&!coloum[y][i]&&cr[(x/3)*3+y/3+1][i]==0)
    145             {
    146                 flag=1;
    147                 G[x][y]=i+'0';
    148                 row[x][i]=1;
    149                 coloum[y][i]=1;
    150                 cr[(x/3)*3+y/3+1][i]=1;
    151                 if(y==8)
    152                     dfs(x+1,0);
    153                 else
    154                     dfs(x,y+1);
    155                 G[x][y]='0';
    156                 row[x][i]=0;
    157                 coloum[y][i]=0;
    158                 cr[(x/3)*3+y/3+1][i]=0;
    159             }
    160         }
    161         if(flag==0)
    162             return;
    163     }
    164 }
    165 
    166 int main()
    167 {
    168     //freopen("in.txt","r",stdin);
    169     scanf("%d",&t);
    170     while(t--)
    171     {
    172         sum=0;
    173         clc(row,0);
    174         clc(coloum,0);
    175         clc(cr,0);
    176         clc(row1,0);
    177         for(int i=0;i<9;i++)
    178         {
    179             scanf("%s",G[i]);
    180         }
    181         for(int i=0; i<9; i++)
    182         {
    183             for(int j=0; j<9; j++)
    184             {
    185 
    186                 if(G[i][j]>='1'&&G[i][j]<='9')
    187                 {
    188                     row[i][G[i][j]-'0']=1;
    189                     coloum[j][G[i][j]-'0']=1;
    190                     cr[(i/3)*3+j/3+1][G[i][j]-'0']=1;
    191                 }
    192             }
    193         }
    194         dfs(0,0);
    195         printf("%d
    ",sum);
    196     }
    197     return 0;
    198 }
    View Code
  • 相关阅读:
    安卓官方ViewPager与android.support.design.widget.TabLayout双向交互联动切换 。
    安卓系统设置选项的框架。
    Android动画效果生动有趣的通知NiftyNotification(Android Toast替代品)
    Android第三方开源对话消息提示框:SweetAlertDialog(sweet-alert-dialog)
    百度地图可视化定位效果,可以输入目的地定位。
    利用百度地图开源sdk获取地址信息。
    可伸缩的textview。
    两个activity之间传递数据用startActivityForResult方法。
    Android 主页面顶部栏的通知Notification ,可以自定义通知消息栏的风格,并且点击通知栏进人本程序。
    获取手机通讯录放入PinnedSectionListView中,按名字首字母排序,并且实现拨打电话功能。
  • 原文地址:https://www.cnblogs.com/ITUPC/p/4700382.html
Copyright © 2020-2023  润新知