• poj1691(dfs)


    链接

    dfs了 写得有点乱

      1 #include <iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<algorithm>
      5 #include<stdlib.h>
      6 using namespace std;
      7 #define INF 0xfffffff
      8 struct node
      9 {
     10     int lx,ly,rx,ry,d;
     11 }co[22];
     12 int kk[22][22],o[22];
     13 int num[22][22],oo[22],ans,fk[22];
     14 int n;
     15 void dfs(int u,int de,int vis[])
     16 {
     17     int i,j,ff=0,vv[22];
     18     if(de>ans)
     19     return ;
     20     for(i = 1 ; i <= oo[u] ; i++)
     21     {
     22         int v = num[u][i];
     23         ff = 1;
     24         for(j = 1; j <= o[v] ; j++)
     25         {
     26             int ko = kk[v][j];
     27             if(!vis[ko])
     28             {
     29                 ff=0;
     30                 break;
     31             }
     32         }
     33         if(ff)
     34         vis[v]=1;
     35     }
     36     for(i = 1; i <= n ; i++)
     37     if(!vis[i])
     38     break;
     39     if(i==n+1)
     40     {
     41         ans = de;
     42         return ;
     43     }
     44     for(i = 1; i <= n ; i++)
     45     vv[i] = vis[i];
     46     for(i = 1; i <= n ; i++)
     47     {
     48         if(!vis[i])
     49         {
     50             for(j = 1; j <= o[i] ; j++)
     51             {
     52                 int x = kk[i][j];
     53                 if(!vis[x])
     54                 break;
     55             }
     56             if(j>o[i])
     57             dfs(co[i].d,de+1,vis);
     58         }
     59         for(j = 1; j <= n ; j++)
     60         vis[j] = vv[j];
     61     }
     62 }
     63 int main()
     64 {
     65     int i,j,t,vis[22];
     66     scanf("%d",&t);
     67     while(t--)
     68     {
     69         scanf("%d",&n);
     70         memset(vis,0,sizeof(vis));
     71         memset(kk,0,sizeof(kk));
     72         memset(o,0,sizeof(o));
     73         memset(oo,0,sizeof(oo));
     74         memset(fk,0,sizeof(fk));
     75         ans = INF;
     76         for(i = 1; i <= n ; i++)
     77         {
     78             scanf("%d%d%d%d%d",&co[i].ly,&co[i].lx,&co[i].ry,&co[i].rx,&co[i].d);
     79             oo[co[i].d]++;
     80             num[co[i].d][oo[co[i].d]] = i;
     81         }
     82         for(i = 1; i <= n ; i++)
     83         {
     84             for(j = 1 ; j <= n ; j++)
     85             {
     86                 if(i==j)
     87                 continue;
     88                 if(((co[j].lx>=co[i].lx&&co[j].lx<co[i].rx)||(co[j].rx<=co[i].rx&&co[j].rx>co[i].lx))&&(co[j].ry<=co[i].ly))
     89                 {
     90                     o[i]++;
     91                     kk[i][o[i]] = j;
     92                 }
     93             }
     94         }
     95         for(i = 1; i <= n ; i++)
     96         {
     97             if(!o[i]&&!fk[co[i].d])
     98             {
     99                 fk[co[i].d] = 1;
    100                 dfs(co[i].d,1,vis);
    101             }
    102             memset(vis,0,sizeof(vis));
    103         }
    104         printf("%d
    ",ans);
    105     }
    106     return 0;
    107 }
    View Code
  • 相关阅读:
    nyoj17单调递增最长子序列(dp)
    nyoj995硬币找零(dp完全背包)
    nyoj36最长公共子序列(dp)
    hdu2058 The sum problem(枚举~~等差数列求和公式)
    Oceanbase:ld升级导致的error adding symbols: DSO missing from command line
    c++基础
    笔试中常出现的虚函数问题
    背包问题-面试中的动态规划
    拼音魔法-华东师范大学程序设计竞赛-3256-EOJ
    滴滴新锐2017实习生面试经历
  • 原文地址:https://www.cnblogs.com/shangyu/p/3299249.html
Copyright © 2020-2023  润新知