博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-1270-Following Orders
阅读量:6787 次
发布时间:2019-06-26

本文共 1181 字,大约阅读时间需要 3 分钟。

链接:

题意:

给n个字符,同时给m个约束条件,求满足约束条件下的所有排列情况。

思路:

跟POJ1128很像。

按照约束建图。DFS跑一遍就行。

代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int MAXN = 30 + 10;int Vis[MAXN];int in[MAXN];int M[MAXN][MAXN];char res[MAXN];int cnt;void DFS(int num){ if (num == cnt) { res[num] = '\0'; cout << res << endl; return; } for (int i = 0;i < 26;i++) { if (in[i] == 0 && Vis[i] == 1) { in[i] = -1; for (int j = 0;j < 26;j++) if (M[i][j]) --in[j]; res[num] = 'a'+i; DFS(num+1); in[i] = 0; for (int j = 0;j < 26;j++) if (M[i][j]) ++in[j]; } }}int main(){ string s; while (getline(cin, s)) { cnt = 0; memset(in, 0, sizeof(in)); memset(Vis, 0, sizeof(Vis)); memset(M, 0, sizeof(M)); for (int i = 0;i < s.length();i++) if (s[i] != ' ') Vis[s[i]-'a'] = 1, ++cnt; getline(cin, s); for (int i = 0;i < s.length();) { int l = s[i]-'a'; int r = s[i+2]-'a'; i += 4; if (!M[l][r]) M[l][r] = 1; ++in[r]; } DFS(0); cout << endl; } return 0;}

  

转载于:https://www.cnblogs.com/YDDDD/p/10724502.html

你可能感兴趣的文章
使用Gradle在嵌入式Web容器Jetty中运行Web应用
查看>>
100-98
查看>>
Innodb中的事务隔离级别和锁的关系
查看>>
算法:请找出数组中的某个数,它的左侧数字相加之和等于右边。
查看>>
vi / vim文档编辑器画图详解
查看>>
Oracle基本语句实例代码介绍
查看>>
excel表数据导入到mysql数据库中(自己做的练习保留)
查看>>
bash 函数使用,实现模块化编程
查看>>
LVS实现负载均衡
查看>>
LAMP架构下安装Discuz!论坛
查看>>
shell
查看>>
正则表达式
查看>>
我的友情链接
查看>>
spring MVC的第一次记录
查看>>
js获取 X-X-X N 天后 是 X年X月X日
查看>>
我的友情链接
查看>>
神奇的504 Bad Gateway Timeout
查看>>
mysql安装报错解决一例
查看>>
在服务器上排除问题的头五分钟
查看>>
安装 - FreeBSD + Nginx 环境搭建教程(推荐)
查看>>