Uva--11205 (暴力搜索,DFS)

本文介绍了一种使用深度优先搜索(DFS)算法来确定表示特定数量符号所需的最少LED数目的方法。通过详细的代码示例展示了如何遍历所有可能的状态,并找出能够区分不同符号的最小LED配置。

2014-07-10 01:15:20

题意&思路:问表示n个symbols需要多少个LED。直接DFS。

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 int Case,n,p,tmin,g[105][20];
 6 void Dfs(int *s,int id){
 7     if(id == p){
 8         int flag,tag = 1;
 9         for(int i = 1; i <= n; ++i){
10             for(int j = 1; j <= n; ++j){
11                 if(i == j) continue;
12                 flag = 0;
13                 for(int k = 1; k <= p; ++k){
14                     if(g[i][k] != g[j][k] && s[k]){
15                         flag = 1;
16                         break;
17                     }
18                 }
19                 if(!flag){
20                     tag = 0;
21                     break;
22                 }
23             }
24             if(!tag) break;
25         }
26         if(tag){
27             int cnt = 0;
28             for(int i = 1; i <= p; ++i)
29                 if(s[i]) ++cnt;
30             tmin = min(tmin,cnt);
31         }
32         return;
33     }
34     s[id + 1] = 0;
35     Dfs(s,id + 1);
36     s[id + 1] = 1;
37     Dfs(s,id + 1);
38 }
39 
40 int main(){
41     scanf("%d",&Case);
42     while(Case--){
43         scanf("%d%d",&p,&n);
44         for(int i = 1; i <= n; ++i)
45             for(int j = 1; j <= p; ++j)
46                 scanf("%d",&g[i][j]);
47         int mark[20] = {0};
48         tmin = 100;
49         Dfs(mark,1);
50         mark[1] = 1;
51         Dfs(mark,1);
52         printf("%d\n",tmin);
53     }
54     return 0;
55 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/3834923.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值