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

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

 #include <cstdio>
#include <cstring>
#include <cctype>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
#define N 26 map<char, int> id;
map<int, char> var;
vector<int> AdjList[N], ans;
int n, indegree[]; void newNode(char c)
{
if (!id.count(c))
{
int t = id.size();
id[c] = t;
var[t] = c;
}
} void dfs(int cur)
{
if (cur == n)
{
for (int i = ; i < n; i++) printf("%c", var[ans[i]]);
printf("\n");
return;
}
for (int i = ; i < n; i++)
if (indegree[i] == )
{
indegree[i] = -;
ans.push_back(i);
vector<int> vt;
for (int j = ; j < AdjList[i].size(); j++)
{
int v = AdjList[i][j];
vt.push_back(v);
indegree[v]--;
}
dfs(cur+);
for (int j = ; j < vt.size(); j++)
indegree[vt[j]]++;
ans.pop_back();
indegree[i] = ;
}
} int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
freopen("out", "w", stdout);
#endif
char str[];
bool first = true;
while (gets(str))
{
int len = strlen(str);
id.clear();
var.clear();
vector<char> varList;
for (int i = ; i < len; i++)
if (islower(str[i]))
varList.push_back(str[i]);
sort(varList.begin(), varList.end());
for (int i = ; i < varList.size(); i++) newNode(varList[i]);
n = id.size();
gets(str);
len = strlen(str);
vector<int> rel;
for (int i = ; i < len; i++)
if (islower(str[i]))
rel.push_back(id[str[i]]);
for (int i = ; i < N; i++) indegree[i] = ;
for (int i = ; i < N; i++) AdjList[i].clear();
for (int i = ; i+ < rel.size(); i += )
{
AdjList[rel[i]].push_back(rel[i+]);
indegree[rel[i+]]++;
}
if (first) first = false;
else printf("\n");
dfs();
}
return ;
}

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

最新文章

  1. Java牛人
  2. How to run a (Tomcat)Java application server on a Azure virtual machine
  3. HQueue:基于HBase的消息队列
  4. ie8默认主页/起始页无法修改
  5. JavaScriptCore-b
  6. Target runtime Apache Tomcat v6.0 is not defined. phyy Unknown Faceted Project Problem
  7. 《Programming WPF》翻译 第5章 4.元素类型样式
  8. linux添加超级用户
  9. BMP文件解析
  10. 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1
  11. _Bool and bool
  12. [JAVA]为什么==和equals总让新手迷惑? 详解 关系操作符 == 和 equals
  13. struts建立工程helloworld
  14. InfluxDB学习之InfluxDB的基本操作| Linux大学
  15. Threejs 开发3D地图实践总结【转】
  16. Javascript框架
  17. 【ORACLE】使用中注意事项(二)
  18. iOS - UIPasteboard
  19. linux ctags
  20. 「BZOJ3226」[Sdoi2008]校门外的区间

热门文章

  1. android平台菜单返回键监听
  2. 链接libtorrent库时出现的问题
  3. 利用未文档化API:RtlAdjustPrivilege 提权实现自动关机
  4. Python中括号的区别及用途
  5. WebSphere MQ 入门指南【转】
  6. 【转】调用getActionBar()报Call requires API level 11 (current min is 8): android.app.Activity#getActionBar
  7. P8 Visible Lattice Points
  8. C++异常机制的实现方式和开销分析
  9. PAT (Advanced Level) 1059. Prime Factors (25)
  10. POJ 2296 Map Labeler