POJ 2337 Catenyms(有向欧拉图:输出欧拉路径)
题目链接>>>>>>
题目大意:
给出一些字符串,问能否将这些字符串 按照 词语接龙,首尾相接 的规则 使得每个字符串出现一次
如果可以 按字典序输出这个字符串序列
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
#define M 1050
using namespace std;
int n, top;
struct edge {
int to, vis, id; //to代表边的终点,id代表边的编号
};
vector<edge>w[M];
string str[M]; //原来还可以这样定义字符串数组
int ans[M];
int fa[]; int find(int x)
{
return x == fa[x] ? x : fa[x] = find(fa[x]);
} void fleury(int loc)
{
for (int i = ; i<w[loc].size(); i++)
if (!w[loc][i].vis)
{
w[loc][i].vis = ;
fleury(w[loc][i].to);
ans[top++] = w[loc][i].id;
}
return;
} int main()
{
int indegree[], outdegree[];
int T;
scanf("%d", &T);
while (T--)
{
top = ;
for (int i = ; i<; i++)
{
w[i].clear();
outdegree[i] = indegree[i] = ;
fa[i] = i;
}
scanf("%d", &n);
int a, b;
for (int i = ; i<n; i++)
cin >> str[i];
sort(str, str + n); //根据字典序排序
edge edg;
int start;
for (int i = ; i<n; i++)
{
a = str[i][] - 'a';
b = str[i][str[i].size() - ] - 'a';
indegree[a]++;
outdegree[b]++;
fa[find(a)] = find(b);
edg.to = b; edg.vis = ; edg.id = i;
w[a].push_back(edg);
if (i == ) //重要 起点必须为初始化为第一条边的出节点(字典序最小,且满足 欧拉回路 的的要求)
start = a;
} int ss = , num = , start_num = , end_num = ;
for (int i = ; i<; i++)
{
if ((indegree[i] || outdegree[i]) && find(i) == i) //find(i)==i是用来判断整个图是否连通的,因为图存在欧拉通路的条件之一就是必须是连通图
ss++; //结合下面的ss==1,来理解,因为如果整个图是连通的,ss就只会在当i为根节点的时候+1
if (indegree[i] != outdegree[i])
{
if (outdegree[i] - indegree[i] == -)
start = i, start_num++; //这里和上面的初始化start的步骤不懂,做题的时候就是卡在了选取第一个出节点的步骤
else if (outdegree[i] - indegree[i] == )
end_num++;
num++;
}
}
if ((num == || (num == && start_num == && end_num == )) && ss == ) //存在欧拉通路的条件
{
fleury(start); //我对start的选取不是很理解
for (int i = top - ; i >= ; i--) //要使输出的单词按字典序输出
{
if (i == )
cout << str[ans[i]] << endl;
else
cout << str[ans[i]] << ".";
}
}
else
cout << "***" << endl;
}
return ;
}
2018-04-07
POJ 2337 Catenyms(有向欧拉图:输出欧拉路径)的更多相关文章
- POJ 2337 Catenyms (有向图欧拉路径,求字典序最小的解)
Catenyms Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8756 Accepted: 2306 Descript ...
- POJ 2337 Catenyms(欧拉回(通)路:路径输出+最小字典序)
题目链接:http://poj.org/problem?id=2337 题目大意:给你n个字符串,只有字符串首和尾相同才能连接起来.请你以最小字典序输出连接好的单词. 解题思路:跟POJ1386一个意 ...
- poj 2337 Catenyms 【欧拉路径】
题目链接:http://poj.org/problem?id=2337 题意:给定一些单词,假设一个单词的尾字母与还有一个的首字母同样则能够连接.问能否够每一个单词用一次,将全部单词连接,能够则输出字 ...
- POJ 2337 Catenyms (欧拉图)
本文链接http://i.cnblogs.com/EditPosts.aspx?postid=5402042 题意: 给你N个单词,让你把这些单词排成一个序列,使得每个单词的第一个字母和上一个字单词的 ...
- POJ 2337 Catenyms
http://poj.org/problem?id=2337 题意: 判断给出的单词能否首尾相连,输出字典序最小的欧拉路径. 思路: 因为要按字典序大小输出路径,所以先将字符串排序,这样加边的时候就会 ...
- POJ 2337 Catenyms (欧拉回路)
Catenyms Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8173 Accepted: 2149 Descript ...
- POJ 2337 Catenyms(有向图的欧拉通路)
题意:给n个字符串(3<=n<=1000),当字符串str[i]的尾字符与str[j]的首字符一样时,可用dot连接.判断用所有字符串一次且仅一次,连接成一串.若可以,输出答案的最小字典序 ...
- Poj 2337 Catenyms(有向图DFS求欧拉通路)
题意: 给定n个单词, 问是否存在一条欧拉通路(如acm,matal,lack), 如果存在, 输出字典序最小的一条. 分析: 这题可以看作http://www.cnblogs.com/Jadon97 ...
- poj 2337 有向图输出欧拉路径
Catenyms Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10186 Accepted: 2650 Descrip ...
随机推荐
- 8、判断三角形ABC中是否有点D
思路: 首先连接AD,BD,CD,SABC为三角形的面积,SABD为三角形ABD的面积,SACD....,SBCD....... 因此,若D在三角形则SABC = SABD + SACD + SBCD ...
- android当前网络连接类型判断
package net.nyist.netState; import android.content.Context; import android.net.ConnectivityManager; ...
- ubuntu14.04下 Kinect V2+Ros接口安装
1. 首先git下载代码,放到主文件夹下面 git clone https://github.com/OpenKinect/libfreenect2.git 2. 然后安装依赖项如下,最好事先编译安装 ...
- Dubbo多版本
当服务提供者提供的服务接口出现不兼容升级时,可以设置版本号,使用多个版本号(version)进行过渡. 1).服务提供者配置文件 <dubbo:service ref="userSer ...
- Linux下svn常用指令【转】
转自:http://blog.csdn.net/myarrow/article/details/8110858 Windows下的TortoiseSVN是资源管理器的一个插件,以覆盖图标表示文件状态, ...
- 写好shell脚本的13个技巧【转】
有多少次,你运行./script.sh,然后输出一些东西,但却不知道它刚刚都做了些什么.这是一种很糟糕的脚本用户体验.我将在这篇文章中介绍如何写出具有良好开发者体验的 shell 脚本. 产品的最终用 ...
- Windows10 中在指定目录下启动Powershell
(1)首先进入该目录: (2)按住shift键,且同时在该目录空白处鼠标右击,打开右键菜单: (3)此时可以发现,在右键菜单中,多了一项,叫做[在此处打开Powershell窗口(s)],点击该项: ...
- oracle 存储过程 clob 字段 调试
clob 没法直接赋值调试,可以新建一个存储过程,赋值给clob字段,然后调试
- zabbix系列(二)zabbix3.0.4添加对mysql数据库性能的监控
zabbix3.0.4添加Mysql的监控 zabbix3.0 server已自带mysql的模板了,只需安装agent端,然后在web端给主机增加模板就行了. Agent端操纵 /etc/zabbi ...
- vue-router两种模式,到底什么情况下用hash,什么情况下用history模式呢?
转:https://segmentfault.com/q/1010000010340823/a-1020000010598395 为什么要有 hash 和 history 对于 Vue 这类渐进式前端 ...