以下是引用azzbcc在2016-12-14 10:43:25的发言:
正确性毋庸置疑,我也测试了len+1,吹水佬版主觉得呢
正确性毋庸置疑,我也测试了len+1,吹水佬版主觉得呢
我是按规则数组各组顺序取出(不重复)的字符作为初始输出字符串。
这个要看首先假设的字符串排列,如果一开始就是 abcde 就快好多了, 可以试试初始为 edcba, 看看有什么不同。
可以跟踪一下m的变化看看。
#include <stdio.h> char * fun(char array[][3], int len, char * ans) { char m[26][26] = {0}, d[26] = {0}, t[26] = {0}, * r = ans; int i, j; for(i = 0; i < len; i++) { char a = array[i][0] - 'a'; char b = array[i][1] - 'a'; char c = array[i][2] - 'a'; if(!m[a][b]) m[a][b] = 1, d[b]++; if(!m[b][c]) m[b][c] = 1, d[c]++; t[a] = t[b] = t[c] = 1; } for(i = 0; i < 26; i++) { if(!t[i] || d[i]) continue; for(t[i] = j = 0; j < 26; j++) d[j] -= m[i][j]; *(r++) = i + 'a'; i = -1; } *r = 0; return ans; } int main() { char array[1024][3], ans[32]; int len, i, j; for(; ~scanf("%d\n", &len); puts(fun(array, len, ans))) for(i = 0; i < len; i++) scanf(" %c %c %c", &array[i][0], &array[i][1], &array[i][2]); return 0; }