poj 2337 && zoj 1919 欧拉回路+连通性判断
题目要求按字典序排列,而且可能有重边
所以一开始就将数组从大到小排列,那么我将字符串加入链表时就会令小的不断前移,大的被挤到后面
这里有一点问题就是我一开始使用的是qsort:
int cmp(const void *s1 , const void *s2)
{
return strcmp((char*)s1 , (char*)s2)<0;
}
qsort(str , n , sizeof(str[0]) , cmp)
poj一直wa,试了发zoj却过了,可能是编译器原因吧,然后将字符串放入了结构体重新进行排序,poj才给过
寻找欧拉回路的关键代码
void dfs(int u , int id)
{
for(int i=first[u] ; i!=-1 ; i=e[i].next){
if(e[i].flag){
e[i].flag=false;
dfs(e[i].y , e[i].id);
rec[top2++]=e[i].id;
}
}
}
将其逆序输出即可
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 1010
int n , in[N] , out[N] , cnt , st , la;
int first[N] , k;
int top1 , top2;
int rec[N]; struct Str{
char str[];
}str[N]; bool cmp(Str s1 , Str s2)
{
return strcmp(s1.str , s2.str)>;
} struct Edge{
int y , next , id;
bool flag;
}e[N*]; Edge stack[N]; void add_edge(int x,int y ,int id)
{
e[k].y=y , e[k].id = id , e[k].flag=true , e[k].next=first[x];
first[x]=k++;
} void dfs(int u , int id)
{
for(int i=first[u] ; i!=- ; i=e[i].next){
if(e[i].flag){
e[i].flag=false;
dfs(e[i].y , e[i].id);
rec[top2++]=e[i].id;
}
}
} void Fleury()
{
top1 = top2 = ;
dfs(st , -);
} int main()
{
// freopen("a.in" , "r" , stdin);
int T;
scanf("%d" , &T);
while(T--)
{
scanf("%d" , &n);
for(int i= ; i<n ; i++) scanf("%s" , str[i].str);
sort(str , str+n , cmp);
// for(int i=0 ; i<n ; i++) printf("%s\n" , str[i]);
memset(first , - , sizeof(first));
memset(in , , sizeof(in));
memset(out , , sizeof(out));
k=;
for(int i= ; i<n ; i++){
int len = strlen(str[i].str);
int a = str[i].str[]-'a' , b = str[i].str[len-]-'a';
add_edge(a , b , i);
in[b]++ , out[a]++;
}
cnt=,st=- , la=-; bool flag=true;
for(int i=;i<;i++){
if(abs(out[i]-in[i])>){
flag=false;
break;
}
if(out[i]!=in[i]){
cnt++;
if(st==- && out[i]==in[i]+) st=i;
else if(la==- && in[i]==out[i]+) la=i;
else{
flag=false;
break;
}
}
}
if(!flag || (cnt!= && cnt!=)){printf("***\n");continue;} if(st<){
for(int i= ; i< ; i++)
if(out[i]){
st = i;
break;
}
}
Fleury();
// cout<<top2<<endl;
if(top2<n){printf("***\n");continue;}
for(int i=top2- ; i> ; i--) printf("%s." , str[rec[i]].str);
printf("%s\n" , str[rec[]].str);
}
return ;
}
poj 2337 && zoj 1919 欧拉回路+连通性判断的更多相关文章
- POJ 2337 Catenyms (欧拉回路)
Catenyms Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8173 Accepted: 2149 Descript ...
- poj 2337(单向欧拉路的判断以及输出)
Catenyms Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11648 Accepted: 3036 Descrip ...
- UVA12188-Inspector's Dilemma(欧拉回路+连通性判断)
Problem UVA12188-Inspector's Dilemma Time Limit: 3000 mSec Problem Description In a country, there a ...
- poj 1300 Door Man 欧拉回路
题目链接:http://poj.org/problem?id=1300 You are a butler in a large mansion. This mansion has so many ro ...
- HDU 1878 欧拉回路(判断欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878 题目大意:欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一 ...
- POJ 2337 Catenyms (欧拉图)
本文链接http://i.cnblogs.com/EditPosts.aspx?postid=5402042 题意: 给你N个单词,让你把这些单词排成一个序列,使得每个单词的第一个字母和上一个字单词的 ...
- POJ 1562 && ZOJ 1709 Oil Deposits(简单DFS)
题目链接 题意 : 问一个m×n的矩形中,有多少个pocket,如果两块油田相连(上下左右或者对角连着也算),就算一个pocket . 思路 : 写好8个方向搜就可以了,每次找的时候可以先把那个点直接 ...
- poj 1041(字典序输出欧拉回路)
John's trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8641 Accepted: 2893 Spe ...
- POJ 3076 / ZOJ 3122 Sudoku(DLX)
Description A Sudoku grid is a 16x16 grid of cells grouped in sixteen 4x4 squares, where some cells ...
随机推荐
- Dapper系列之二:Dapper的事务查询
Dapepr讲解 上篇文章我们介绍了,什么是Dapepr,有什么好处,性能的对比,还有多表多数据添加操作(事务的封装)等等.本篇文章我们继续讲解.....如果本篇文章看不懂,请看我上一篇文章:Dape ...
- 通用maper无法获取实体类com.qmtt.model.PhWxUser对应的表名问题
spring boot在采用了热加载后,可能会出现“无法获取实体类com.qmtt.model.PhWxUser对应的表名!”的异常, 解决办法 在resources新建一个文件夹META-INF,新 ...
- AJPFX关于StringBuffer,StringBuilder类 总结(一)
StringBuffer,StringBuilder类 StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高 StringBuffer:概述1) ...
- (3)《Head First HTML与CSS》学习笔记---CSS入门
1.O‘Reilly的<CSS PocketReference>是一本不错的CSS参考小书,记录了常用的元素属性. 2.元素选择器的作用强于继承的作用:用户定义强于浏览器默认(以下所有讨论 ...
- 如何正确理解和使用 Activity的4种启动模式
关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法,便于读者正确应用. Activity的启动模式有4 ...
- powerDesigner 一些设置
常用设置 table中需要显示的内容 --------------------------------------------------------------------------------- ...
- 获取声音设备名称及PNPDeviceID
实现效果: 知识运用: WMI管理类中的 ManagementObjectSearcher类 //基于指定的查询检索管理对象的集合 用于检索管理信息的较为常用的入口点之一 public Managem ...
- ES6(vue)对象词法扩展
ES6 允许声明在对象字面量时使用简写语法,来初始化属性变量和函数的定义方法,并且允许在对象属性中进行计算操作: function getCar(make, model, value) { retur ...
- 有n个整数,使其前面各数顺序向后移n-m个位置,最后m个数变成最前面的m个数
题目:有n个整数,使其前面各数顺序向后移n-m个位置,最后m个数变成最前面的m个数 public class 第三十六题数组向后移m个位置 { public static void main(Stri ...
- 雷林鹏分享:Lua 基本语法
Lua 学习起来非常简单,我们可以创建第一个 Lua 程序! 第一个 Lua 程序 交互式编程 Lua 提供了交互式编程模式.我们可以在命令行中输入程序并立即查看效果. Lua 交互式编程模式可以通过 ...