poj 1270(toposort)
http://poj.org/problem?id=1270
题意:给一个字符串,然后再给你一些规则,要你把所有的情况都按照字典序进行输出。
思路:很明显这肯定要用到拓扑排序,当然看到discuss里面有些人有bfs也可以做,有时候觉得搜索只要剪枝剪的好,啥都可以用搜索。
因为我也不是很会拓扑排序,所以在找这类的题来练习,增加对其的理解。我就发现了一个问题,为什么拓扑排序要构图?
其实也很简单,因为拓扑排序是对一个有向的无环图进行排序,有向指的是某个点排序后一定是出现在他的前一个点的后面。这个是一定的,所以要构图。
当然,我现在也只是浅显的理解。以后有了更深的理解会在写。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <map>
#define maxn 60 using namespace std; int indegree[ maxn ];
char ans[ maxn ];
int graph[ maxn ][ maxn ],num;
char str[ maxn ]; int cmp(const void *a,const void *b)
{
return (*(char *)a)-(*(char * )b);
} void toposort(int depth) //toposort+递归.
{
if(depth == num )
{
printf("%s\n",ans);
return;
}
for( int i = ; i < num ; i++)
{
if(!indegree[ i ])
{
indegree [ i ] --;
ans[ depth ] = str[ i ];
for ( int j = ; j < num ; j++ )
if( graph [ i ][ j ])
indegree[ j ] --;
toposort(depth+);
indegree [ i ] ++;
for( int j = ; j < num ; j++ )
if(graph[ i ][ j ])
indegree [ j ] ++;
}
}
} int main()
{
// freopen("in.txt","r",stdin);
char inp[ maxn ];
while(gets( inp ))
{
memset( graph , , sizeof( graph ) );
memset( str , , sizeof( str ) );
memset( ans , , sizeof( ans ) );
memset( indegree , , sizeof( indegree ) );
map<char,int >s;
int len = strlen( inp ), k = ;
for( int i = ; i < len ; i++ )
if(inp[ i ] >='a' && inp[ i ] <= 'z')
str[ k++ ] = inp[i];
qsort( str , k , sizeof( str[] ) , cmp );
num = k;
for( int i = ; i < len ; i++ )
s[ str[ i ] ] = i; //对点进行构图一定要在排序之后,不然会wa.
memset( inp , , sizeof( inp ) );
gets( inp );
len = strlen( inp );
for( int i = ; i < len ; i += )
{
graph[ s[ inp[ i ] ] ][ s[ inp[ i + ] ] ] = ;
indegree [ s[ inp[ i + ] ] ] ++;
}
toposort();
memset( inp , ,sizeof( inp ) );
printf("\n");
}
return ;
}
poj 1270(toposort)的更多相关文章
- POJ 1270 Following Orders
Following Orders Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4902 Accepted: 1982 ...
- poj 1270(dfs+拓扑排序)
题目链接:http://poj.org/problem?id=1270 思路:就是一简单的dfs+拓扑排序,然后就是按字典序输出所有的情况. http://paste.ubuntu.com/59872 ...
- POJ 1270 Following Orders 拓扑排序
http://poj.org/problem?id=1270 题目大意: 给你一串序列,然后再给你他们部分的大小,要求你输出他们从小到大的所有排列. 如a b f g 然后 a<b ,b< ...
- poj 1270 Following Orders (拓扑排序+回溯)
Following Orders Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5473 Accepted: 2239 ...
- POJ 1270 Following Orders (拓扑排序,dfs枚举)
题意:每组数据给出两行,第一行给出变量,第二行给出约束关系,每个约束包含两个变量x,y,表示x<y. 要求:当x<y时,x排在y前面.让你输出所有满足该约束的有序集. 思路:用拓扑排 ...
- POJ 1270 Following Orders(拓扑排序)题解
Description Order is an important concept in mathematics and in computer science. For example, Zorn' ...
- POJ 1270
#include<iostream> #include<algorithm> #define MAXN 26 #define MAX 300 using namespace s ...
- POJ 1270 Following Orders(拓扑排序)
题意: 给两行字符串,第一行为一组变量,第二行时一组约束(每个约束包含两个变量,x y 表示 x <y).输出满足约束的所有字符串序列. 思路:拓扑排序 + 深度优先搜索(DFS算法) 课本代码 ...
- Day4 - H - Following Orders POJ - 1270
Order is an important concept in mathematics and in computer science. For example, Zorn's Lemma stat ...
随机推荐
- NOI2018准备Day14晚
1个小时调处了前天晚上卡了一个晚上的数独,果然还是dfs回溯的问题. 1个小时做codevs2500城堡,然而并没有做出来 剩下1个小时,做了一道字符串的STL,空格和换行符 ,真心累啊...... ...
- em(倍)与px的区别
在国内网站中,包括三大门户,以及“引领”中国网站设计潮流的蓝色理想,ChinaUI等都是使用了px作为字体单位.只有百度好歹做了个可调的表率.而 在大洋彼岸,几乎所有的主流站点都使用em作为字体单位, ...
- Eclipse添加JPDL4 Schema校验
由于jbpm官方提供的图形化流程设计器(GPD)功能并不是特别的全面,很多设计并不能全在图形界面下完成.因此,在很多情况下,我们需要直接编辑JPDL的XML源代码,所以, 最好为JPDL XML指定S ...
- Android studio2.2 ndk 错误 :format not a string literal and no format arguments!
在Android Studio2.2 进行NDK编程,在对*char 字符串 进行日志输出时,报错: error: format not a string literal and no format ...
- Linux任务调度进程crontab的使用方法和注意事项
参考文章:Linux任务调度进程crond命令的使用方法和注意事项 一.crond简介 概念 crond的概念和crontab是不可分割的.crontab是一个命令,常见于Unix和类Unix的操作系 ...
- Honeywords项目——检查密码是否被破解的一种简单方法
Honeywords项目使用一种简单的方法来改进hash后的密码的安全性——为每个账户维护一个额外的honeywords(假密码).如果有黑客拿到了密码的文件,然后试图用brute froce的方式破 ...
- SpringBoot源码解析:tomcat启动分析
>> spring与tomcat的启动分析:war包形式 tomcat:xml加载规范 1.contex-param: 初始化参数 2.listener-class: contextloa ...
- ajax之 get post请求
get请求 function get(){ $.get( "./Aservlet?id=5", function(data, textStatus, jqXHR){ $(" ...
- 【Alpha版本】冲刺随笔汇总
[Alpha版本]冲刺-Day1 [Alpha版本]冲刺-Day2 [Alpha版本]冲刺-Day3 [Alpha版本]冲刺-Day4 [Alpha版本]冲刺-Day5 [Alpha版本]冲刺-Day ...
- Publishing failed with multiple errors 异常
Publishing failed with multiple errors 在使用eclipse发布项目时不能自动生成class文件,且无法启动调试的Tomcat服务.启动过程提示 以上 异常 解决 ...