• hdu 4068 SanguoSHA


    搜索下就可以了……

    代码如下:

      1 #include<iostream>
      2 #include<cstring>
      3 #include<cstdio>
      4 #include<algorithm>
      5 #include<map>
      6 using namespace std;
      7 int p[10][10],n,a[7],b[7];
      8 string str[10],s;
      9 bool flag,vis[10],vis2[10];
     10 bool dfs2(int d)
     11 {
     12     int i,j;
     13     if(d==n){
     14         i=j=0;
     15         while(i<n&&j<n){
     16             bool f=0;
     17             for(int k=1;k<=p[b[j]][0];k++)
     18             if(p[b[j]][k]==a[i]){
     19                 f=1;
     20                 break;
     21             }
     22             if(f) i++;
     23             else j++;
     24         }
     25         if(i==n) return 0;
     26         return 1;
     27     }
     28     for(i=0;i<n;i++){
     29         if(vis2[i]==0){
     30             vis2[i]=1;
     31             b[d]=i;
     32             if(!dfs2(d+1)) return 0;
     33             vis2[i]=0;
     34         }
     35     }
     36     return 1;
     37 }
     38 bool dfs(int d)
     39 {
     40     int i,j;
     41     if(d==n){
     42         flag=0;
     43         for(i=0;i<n;i++){
     44             memset(vis2,0,sizeof(vis2));
     45             b[0]=i;
     46             vis2[i]=1;
     47             if(!dfs2(1)){
     48                 flag=1;
     49                 break;
     50             }
     51         }
     52         if(flag) return 0;
     53         return 1;
     54     }
     55     for(i=0;i<n;i++){
     56         if(vis[i]==0){
     57             vis[i]=1;
     58             a[d]=i;
     59             if(dfs(d+1)) return 1;
     60             vis[i]=0;
     61         }
     62     }
     63 }
     64 int main()
     65 {
     66     int t,i,j,k,ca=0;
     67     cin>>t;
     68     while(t--){
     69         cin>>n;
     70         for(i=0;i<n;i++)
     71             cin>>str[i];
     72         sort(str,str+n);
     73         for(i=0;i<n;i++){
     74             cin>>p[i][0];
     75             for(j=1;j<=p[i][0];j++){
     76                 cin>>s;
     77                 for(k=0;k<n;k++){
     78                     if(s==str[k]){
     79                         p[i][j]=k;
     80                         break;
     81                     }
     82                 }
     83             }
     84         }
     85         for(i=0;i<n;i++){
     86             memset(vis,0,sizeof(vis));
     87             vis[i]=1;
     88             a[0]=i;
     89             if(dfs(1)){
     90                 break;
     91             }
     92         }
     93         printf("Case %d: ",++ca);
     94         if(i==n) puts("No");
     95         else{
     96             puts("Yes");
     97             for(i=0;i<n-1;i++)
     98                 cout<<str[a[i]]<<' ';
     99             cout<<str[a[i]]<<endl;
    100         }
    101     }
    102     return 0;
    103 }
    View Code
  • 相关阅读:
    边框的各种样式
    内容溢出显示省略号
    UNIAPP开发注意事项
    css文本的三条线 删除线 下划线 上划线
    防抖截流
    浏览器窗口改变触发的函数
    ES5数组方法
    弹性布局
    ubuntu16.04 安装adb
    git clone
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3292434.html
Copyright © 2020-2023  润新知