zoukankan      html  css  js  c++  java
  • UVa 124

      题目大意:给一个变量列表和变量的大小关系,输出所有的满足约束的序列。

      构建为有向图,然后就是拓扑排序,使用回溯输出所有的结果。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cctype>
     4 #include <map>
     5 #include <algorithm>
     6 #include <vector>
     7 using namespace std;
     8 #define N 26
     9 
    10 map<char, int> id;
    11 map<int, char> var;
    12 vector<int> AdjList[N], ans;
    13 int n, indegree[26];
    14 
    15 void newNode(char c)
    16 {
    17     if (!id.count(c))
    18     {
    19         int t = id.size();
    20         id[c] = t;
    21         var[t] = c;
    22     }
    23 }
    24 
    25 void dfs(int cur)
    26 {
    27     if (cur == n)
    28     {
    29         for (int i = 0; i < n; i++)  printf("%c", var[ans[i]]);
    30         printf("
    ");
    31         return;
    32     }
    33     for (int i = 0; i < n; i++)
    34         if (indegree[i] == 0)
    35         {
    36             indegree[i] = -1;
    37             ans.push_back(i);
    38             vector<int> vt;
    39             for (int j = 0; j < AdjList[i].size(); j++)
    40             {
    41                 int v = AdjList[i][j];
    42                 vt.push_back(v);
    43                 indegree[v]--;
    44             }
    45             dfs(cur+1);
    46             for (int j = 0; j < vt.size(); j++)
    47                 indegree[vt[j]]++;
    48             ans.pop_back();
    49             indegree[i] = 0;
    50         }
    51 }
    52             
    53 int main()
    54 {
    55 #ifdef LOCAL
    56     freopen("in", "r", stdin);
    57     freopen("out", "w", stdout);
    58 #endif
    59     char str[1000];
    60     bool first = true;
    61     while (gets(str))
    62     {
    63         int len = strlen(str);
    64         id.clear();
    65         var.clear();
    66         vector<char> varList;
    67         for (int i = 0; i < len; i++)
    68             if (islower(str[i]))
    69                 varList.push_back(str[i]);
    70         sort(varList.begin(), varList.end());
    71         for (int i = 0; i < varList.size(); i++)  newNode(varList[i]);
    72         n = id.size();
    73         gets(str);
    74         len = strlen(str);
    75         vector<int> rel;
    76         for (int i = 0; i < len; i++)
    77             if (islower(str[i]))
    78                 rel.push_back(id[str[i]]);
    79         for (int i = 0; i < N; i++)  indegree[i] = 0;
    80         for (int i = 0; i < N; i++)  AdjList[i].clear();
    81         for (int i = 0; i+1 < rel.size(); i += 2)
    82         {
    83             AdjList[rel[i]].push_back(rel[i+1]);
    84             indegree[rel[i+1]]++;
    85         }
    86         if (first)  first = false;
    87         else  printf("
    ");
    88         dfs(0);    
    89     }
    90     return 0;
    91 }
    View Code

      第一次忘了给变量列表排序,结果WA了一次...

  • 相关阅读:
    07_Python语法示例(基础语法,文件操作,异常处理)
    练习js——自动化实现12306火车票查询
    【转】app自动化问题点整理
    TouchAction的花式应用——APP九宫格绘制
    【转】web 自动化文件上传不要太简单
    阶段小测试我的作业
    Mac Chrome浏览器取消自动升级
    Mac下安装selenium及Chromedrive驱动
    【转】Jenkins配置Git push后自动构建
    函数使用练习
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3350221.html
Copyright © 2011-2022 走看看