• ZOJ Problem Set


    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3861

    这道题当时没做出来,后来经过队友提醒才做出来。

    3*3的九宫格,给你其中n个点按下面要求连起来:

    1. 给你的n个点都要激活(至少经过一次)

    2. 如果点A,B相连后要经过另一个点C,则C在序列中的位置必须在A,B之前 如 1 7 4是不合法的

    3.线段相交是没关系的,如 7 6 9 4

    我是直接生成n个数的全排列,然后在所有排列里面去掉不合法的。

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cmath>
      4 #include <vector>
      5 #include <cstring>
      6 #include <string>
      7 #include <algorithm>
      8 #include <string>
      9 #include <set>
     10 #include <functional>
     11 #include <numeric>
     12 #include <sstream>
     13 #include <stack>
     14 #include <map>
     15 #include <queue>
     16 
     17 #define CL(arr, val)    memset(arr, val, sizeof(arr))
     18 
     19 #define ll long long
     20 #define inf 0x7f7f7f7f
     21 #define lc l,m,rt<<1
     22 #define rc m + 1,r,rt<<1|1
     23 #define pi acos(-1.0)
     24 
     25 #define L(x)    (x) << 1
     26 #define R(x)    (x) << 1 | 1
     27 #define MID(l, r)   (l + r) >> 1
     28 #define Min(x, y)   (x) < (y) ? (x) : (y)
     29 #define Max(x, y)   (x) < (y) ? (y) : (x)
     30 #define E(x)        (1 << (x))
     31 #define iabs(x)     (x) < 0 ? -(x) : (x)
     32 #define OUT(x)  printf("%I64d
    ", x)
     33 #define lowbit(x)   (x)&(-x)
     34 #define Read()  freopen("data.txt", "r", stdin)
     35 #define Write() freopen("a.txt", "w", stdout);
     36 #define maxn 1000000000
     37 #define N 500010
     38 using namespace std;
     39 
     40 int b[N][15];
     41 int n,ans,p[15],flag[15];
     42 
     43 bool check(int x)
     44 {
     45     memset(flag,0,sizeof(flag));  //标记访问或者没访问
     46     for(int i=0;i<n;i++)
     47     {
     48         flag[b[x][i]]=1;
     49         if((b[x][i]==1&&b[x][i+1]==9&&flag[5]==0)||(b[x][i]==9&&b[x][i+1]==1&&flag[5]==0)
     50            ||(b[x][i]==1&&b[x][i+1]==7&&flag[4]==0)||(b[x][i]==7&&b[x][i+1]==1&&flag[4]==0)
     51            ||(b[x][i]==1&&b[x][i+1]==3&&flag[2]==0)||(b[x][i]==3&&b[x][i+1]==1&&flag[2]==0)
     52            ||(b[x][i]==2&&b[x][i+1]==8&&flag[5]==0)||(b[x][i]==8&&b[x][i+1]==2&&flag[5]==0)
     53            ||(b[x][i]==3&&b[x][i+1]==9&&flag[6]==0)||(b[x][i]==9&&b[x][i+1]==3&&flag[6]==0)
     54            ||(b[x][i]==3&&b[x][i+1]==7&&flag[5]==0)||(b[x][i]==7&&b[x][i+1]==3&&flag[5]==0)
     55            ||(b[x][i]==4&&b[x][i+1]==6&&flag[5]==0)||(b[x][i]==6&&b[x][i+1]==4&&flag[5]==0)
     56            ||(b[x][i]==7&&b[x][i+1]==9&&flag[8]==0)||(b[x][i]==9&&b[x][i+1]==7&&flag[8]==0))
     57         return 0;
     58     }
     59     return 1;
     60 }
     61 int main()
     62 {
     63    //Read();
     64    //Write();
     65     int t;
     66     scanf("%d",&t);
     67     while(t--)
     68     {
     69         scanf("%d",&n);
     70         for(int i=0;i<n;i++) scanf("%d",&p[i]);
     71         sort(p,p+n);
     72         ans=0;
     73         memset(b,0,sizeof(b));
     74         do
     75         {
     76             for(int i=0;i<n;i++)
     77                 b[ans][i]=p[i];
     78             ans++;
     79         }while(next_permutation(p,p+n));
     80         int x=ans;
     81         for(int i=0;i<ans;i++)
     82         {
     83             if(check(i)==0)
     84                 x--;
     85         }
     86         printf("%d
    ",x);
     87         for(int i=0;i<ans;i++)
     88         {
     89             if(check(i))
     90             {
     91                 for(int j=0;j<n;j++)
     92                 {
     93                     if(j!=n-1)
     94                     printf("%d ",b[i][j]);
     95                     else
     96                     printf("%d
    ",b[i][j]);
     97                 }
     98             }
     99 
    100         }
    101     }
    102     return 0;
    103 }

     dfs也可以做!

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 int mp[10][10];
     9 int a[10];
    10 int n;
    11 bool vis[10];
    12 int cnt;
    13 int s[10];
    14 
    15 void init()
    16 {
    17     mp[1][3] = 2; mp[3][1] = 2;
    18     mp[1][7] = 4; mp[7][1] = 4;
    19     mp[1][9] = 5; mp[9][1] = 5;
    20     mp[2][8] = 5; mp[8][2] = 5;
    21     mp[3][7] = 5; mp[7][3] = 5;
    22     mp[3][9] = 6; mp[9][3] = 6;
    23     mp[4][6] = 5; mp[6][4] = 5;
    24     mp[7][9] = 8; mp[9][7] = 8;
    25 }
    26 
    27 void dfs(int pre,int num,int op)
    28 {
    29 //    printf("%d %d
    ",pre,num);
    30     int i,t;
    31     if(num==n)
    32     {
    33         if(op){
    34             for(i=0;i<n-1;i++)printf("%d ",s[i]);
    35             printf("%d
    ",s[n-1]);
    36         }
    37         cnt++;
    38         return;
    39     }
    40 
    41     for(i=0;i<n;i++)
    42     {
    43         if(!vis[a[i]])
    44         {
    45             if(mp[pre][a[i]]==0||vis[mp[pre][a[i]]]==true)
    46             {
    47                     vis[a[i]]=true;
    48                     s[num]=a[i];
    49                     dfs(a[i],num+1,op);
    50                     vis[a[i]]=false;
    51             }
    52         }
    53     }
    54 }
    55 int main()
    56 {
    57     //freopen("a.txt","r",stdin);
    58     int T,i,j;
    59     scanf("%d",&T);
    60     init();
    61     while(T--)
    62     {
    63         scanf("%d",&n);
    64         for(i=0;i<n;i++){
    65             scanf("%d",&a[i]);
    66         }
    67         sort(a,a+n);
    68         cnt=0;
    69         for(i=0;i<n;i++){
    70             memset(vis,false,sizeof(vis));
    71             vis[a[i]]=true;
    72             s[0]=a[i];
    73             dfs(a[i],1,0);
    74         }
    75         printf("%d
    ",cnt);
    76         for(i=0;i<n;i++){
    77             memset(vis,false,sizeof(vis));
    78             vis[a[i]]=true;
    79             s[0]=a[i];
    80             dfs(a[i],1,1);
    81         }
    82     }
    83     return 0;
    84 }
  • 相关阅读:
    HDU Railroad (记忆化)
    HDU 1227 Fast Food
    HDU 3008 Warcraft
    asp vbscript 检测客户端浏览器和操作系统(也可以易于升级到ASP.NET)
    Csharp 讀取大文本文件數據到DataTable中,大批量插入到數據庫中
    csharp 在万年历中计算显示农历日子出错
    csharp create ICS file extension
    CSS DIV Shadow
    DataTable search keyword
    User select fontface/color/size/backgroundColor设置 字体,颜色,大小,背景色兼容主流浏览器
  • 原文地址:https://www.cnblogs.com/nowandforever/p/4429990.html
Copyright © 2020-2023  润新知