有些伙伴可能和我一样,让欧拉路的起点先直接为 a (考虑到欧拉回路),然后再遍历 26 个字母,如果有个字母的出度等于入读加 1 ,把起点赋为该字母。代码如下:
char start = 'a';
for (char c='a';c<='z';++c) if (du[c][0] == du[c][1] + 1) {
start = c;
break;
}
但是!如果 a 不存在呢?所以不能一开始就赋为 a。代码应修改如下:
char start;
for (char c='a';c<='z';++c) if (du[c][0] || du[c][1]){
start = c;
break;
}
for (char c='a';c<='z';++c) if (du[c][0] == du[c][1] + 1) {
start = c;
break;
}
这么做也能保证字典序最小。