10129 - Play on Words(欧拉道路有向图)

2024-08-24 04:48

本文主要是介绍10129 - Play on Words(欧拉道路有向图),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:10129 - Play on Words


题目大意:词语接龙。


解题思路:刚开始没想到欧拉道路,直接找,结果超时了。

这题满足要求的话就是把每个单词看做一条路,每条路连在一起走一遍就符合要求, 欧拉回路也是符合要求的。


满足欧拉道路:1,至多只有两个点的出度入度相差1。

   2, 这个有向图的无向图连通。(刚开始一直在想,如果有两条一样的路,这样怎么处理,后面发现只要每个点都可以访问到就说明连通了)


#include<stdio.h>
#include<string.h>const int N = 26;
const int M = 1005;
int t, n;
int map[N][N], in[N], out[N], visit[N];
char word[M];void dfs(int x, int &m) {m++;visit[x] = 1;for(int i = 0; i < N; i++)if(map[x][i] && !visit[i]) {dfs(i, m);}
}int num_vertic() {int num = 0;for(int i = 0; i < N; i++)if(in[i] || out[i])num++;return num;
}int get_first() {for(int i = 0; i < N; i++)if(in[i] == 0 && out[i]) {for(int j = 0; j < N; j++)if(map[i][j]) return j;}
}int main() {scanf("%d", &t);while(t--) {scanf("%d", &n);int i, e, f;memset(map, 0, sizeof(map));memset(in, 0, sizeof(in));memset(out, 0, sizeof(out));memset(visit, 0, sizeof(visit));for(i = 0; i < n; i++) {scanf("%s", word);f = word[0] - 'a';e = word[strlen(word) - 1] - 'a';in[e]++;out[f]++;map[f][e] = 1;map[e][f] = 1;}int ok = 0;for(i = 0; i < N; i++) {if(in[i] - out[i] == 1 || out[i] - in[i] == 1) ok++;else if(in[i] != out[i]) {ok = -1;break;}}if(ok != 0 && ok != 2) printf("The door cannot be opened.\n");else {if(ok == 2)e = get_first(); ok = 0;dfs(e, ok);if(ok == num_vertic())printf("Ordering is possible.\n");elseprintf("The door cannot be opened.\n");				}}return 0;
}


这篇关于10129 - Play on Words(欧拉道路有向图)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101494

相关文章

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

HDUPlay on Words

1.定理:无向图G有欧拉通路的充分必要条件是G为连通图,并且G仅有两个奇度结点或者无奇度结点。 (1)当G是仅有两个奇度结点的连通图时,G的欧拉通路必以此两个结点为端点。 (2)当G是无奇度结点的连通图时,G必有欧拉回路。 2.一个有向图D具有欧拉通路,当且仅当D是连通的,且除了两个顶点外,其余顶点的入度均等于出度,这两个特殊的顶点中,一个顶点的入度比出度大1,另一个顶点的入度比出度小1

欧拉系统 kernel 升级、降级

系统版本  cat  /etc/os-release  NAME="openEuler"VERSION="22.03 (LTS-SP1)"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 (LTS-SP1)"ANSI_COLOR="0;31" 系统初始 kernel 版本 5.10.0-136.12.0.

nyoj99(并查集+欧拉路+dfs)

单词拼接 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串。 前一个单词的结尾应该与下一个单词的道字母相同。 如 aloha dog arachnid gopher tiger rat   可以拼接成:aloha.arachnid.dog.gopher.rat.tiger 输入 第一行是一个整

nyoj42(并查集解决欧拉回路)

一笔画问题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。   输入 第一行只有一个正整数N(N<=10)表示测试数据的组数。 每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

DoIP-ISO 13400-1 道路车辆-基于互联网协议的诊断通信(DoIP)-第 1 部分:一般信息和用例定义 (1/2)

如下内容基于2011版本的 ISO 13400开展,内容较多,拆分为2篇,此篇为 1/2。 前言 ISO(国际标准化组织)是一个全球范围内的国际标准机构联合体(ISO 成员机构)。国际标准的制备工作通常通过 ISO 技术委员会进行。每个相关成员机构都有权在已建立的技术委员会中代表其利益。与 ISO 保持联系的国际组织、政府和非政府组织也参与这项工作。ISO 与国际电工委员会(IEC)在所有电气

AI聊天应用不能上架?Google play对AI类型应用的规则要求是什么?

随着生成式AI模型的广泛应用,很多开发者都有在开发AI应用或将其整合到应用中。我们知道,谷歌是非常注重应用生态的,去年开始就推出了一些针对生成式AI应用的政策,对AI应用的内容质量和合规性问题提出了一些要求。 几天前,还有开发者聊到,现在AI类型应用(如AI聊天)上架越来越难了。 (可斯信进qun与众多开发者交流上架经验) 这很可能是没了解清楚Google play 对AI应用的一些

JD 1027:欧拉回路

OJ题目:click here~~ 题目分析: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。若该路径是一个圈,则称为欧拉(Euler)回路。 具有欧拉路径的图称为欧拉图(简称E图)。 无向图存在欧拉回路的充要条件: 一个无向图存在欧拉回路,当且仅当该图拥有奇数度数的顶点的个数为0且该图是连通图。 有向图存在欧拉回路的充要条件: 一

Google play最新政策更新和重要提醒

我们都知道,谷歌会定期更新其政策,而政策的变更通常对开发者及其团队的要求会更为严格,也会增加应用上架的一些限制条件,以此提高应用在谷歌商店的质量。 一起来看看Google play最近的一些政策更新和需要注意的地方。 新政策要求 对于提供金融产品和服务、健康服务、VPN、政府相关服务的开发者,需要注册为“企业”开发者账号才能提审上架应用。 Google play这个举措主要