zoukankan      html  css  js  c++  java
  • E

    题目链接:https://cn.vjudge.net/problem/HDU-5547

    具体思路:对于每一位上,我们可以从1到4挨着去试, 具体判断这一位可不可以的时候,看当前这一位上的行和列有没有冲突,以及他所在的2*2的方格中有没有矛盾的。

    AC代码:

      1 #include <iostream>
      2 #include <string>
      3 #include <deque>
      4 #include <stack>
      5 #include<cmath>
      6 #include <algorithm>
      7 #include<cstring>
      8 #include<stdio.h>
      9 #include<map>
     10 using namespace std;
     11 # define ll long long
     12 # define inf 0x3f3f3f3f
     13 # define ll_inf 1ll<<60
     14 const int maxn = 1e6+100;
     15 char a[15][15];
     16 int b[15][15];
     17 int num;
     18 struct node
     19 {
     20     int x;
     21     int y;
     22 } q[100];
     23 bool judge(int s,int t)
     24 {
     25     for(int i=1; i<=4; i++)
     26     {
     27         if(i==q[t].y)
     28             continue;
     29         if(b[q[t].x][i]==s)
     30             return false;
     31     }
     32     for(int i=1; i<=4; i++)
     33     {
     34         if(i==q[t].x)
     35             continue;
     36         if(b[i][q[t].y]==s)
     37             return false;
     38     }
     39     int t1=q[t].x,t2=q[t].y;
     40     if(t1%2==0&&t2%2==0)
     41     {
     42         t1--;
     43         t2--;
     44         for(int i=0; i<=1; i++)
     45         {
     46             for(int j=0; j<=1; j++)
     47             {
     48                 int x=t1+i;
     49                 int y=t2+j;
     50                 if(x==q[t].x&&y==q[t].y)
     51                     continue;
     52                 if(b[x][y]==s)
     53                     return false;
     54             }
     55         }
     56     }
     57     else if(t1%2==0&&t2%2!=0)
     58     {
     59         t1--;
     60         for(int i=0; i<=1; i++)
     61         {
     62             for(int j=0; j<=1; j++)
     63             {
     64                 int x=t1+i;
     65                 int y=t2+j;
     66                 if(x==q[t].x&&y==q[t].y)
     67                     continue;
     68                 if(b[x][y]==s)
     69                     return false;
     70             }
     71         }
     72     }
     73     else if(t1%2!=0&&t2%2==0)
     74     {
     75         t2--;
     76         for(int i=0; i<=1; i++)
     77         {
     78             for(int j=0; j<=1; j++)
     79             {
     80                 int x=t1+i;
     81                 int y=t2+j;
     82                 if(x==q[t].x&&y==q[t].y)
     83                     continue;
     84                 if(b[x][y]==s)
     85                     return false;
     86             }
     87         }
     88     }
     89     else if(t1%2!=0&&t2%2!=0)
     90     {
     91         for(int i=0; i<=1; i++)
     92         {
     93             for(int j=0; j<=1; j++)
     94             {
     95                 int x=t1+i;
     96                 int y=t2+j;
     97                 if(x==q[t].x&&y==q[t].y)
     98                     continue;
     99                 if(b[x][y]==s)
    100                     return false;
    101             }
    102         }
    103     }
    104     return true;
    105 }
    106 void dfs(int t)
    107 {
    108   //  cout<<t<<endl;
    109     if(t==num+1)
    110     {
    111         for(int i=1; i<=4; i++)
    112         {
    113             for(int j=1; j<=4; j++)
    114             {
    115                 printf("%d",b[i][j]);
    116             }
    117             printf("
    ");
    118         }
    119         return ;
    120     }
    121     for(int i=1; i<=4; i++)
    122     {
    123         if(judge(i,t))
    124         {
    125           //  cout<<1<<endl;
    126             b[q[t].x][q[t].y]=i;
    127             dfs(t+1);
    128             b[q[t].x][q[t].y]=0;
    129         }
    130     }
    131 }
    132 int main()
    133 {
    134     int T;
    135     scanf("%d",&T);
    136     int Case=0;
    137     while(T--)
    138     {
    139         num=0;
    140         for(int i=1; i<=4; i++)
    141         {
    142             scanf("%s",a[i]+1);
    143             for(int j=1; j<=4; j++)
    144             {
    145               //  cout<<a[i][j];
    146                 if(a[i][j]=='*')
    147                 {
    148                     q[++num].x=i;
    149                     q[num].y=j;
    150                     b[i][j]=0;
    151                 }
    152                 else
    153                     b[i][j]=a[i][j]-'0';
    154             }
    155         }
    156         printf("Case #%d:
    ",++Case);
    157         dfs(1);
    158     }
    159     return 0;
    160 }
  • 相关阅读:
    IOS 学习 开发 自定义 UINavigationController 导航
    -canOpenURL: failed for URL: ""
    一种简单的直观的高效的权限设计
    查询最近24小时、昨天、最近7天、上周、最近30天、上月的数据记录
    MS SQLSERVER中如何快速获取表的记录总数
    MVC MVVM和传统三层的理解
    C# 后台模拟前台post发送json数据
    C# Post发送数据返回页面结果
    CSS同时使用背景图片和背景颜色
    C# 根据日期计算星期几
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262758.html
Copyright © 2011-2022 走看看