#include #include char word[100][100]; int check[100], temp[100], words[100], cnt = 0, cntmax = 0, maxmax = 0; void siritori(char *word, char *base, int *check, int wordnum, int n) { int i, j; temp[cnt++] = wordnum; for(i = 0; i < n; i++) { if(!strcmp(word, base + i * 100)) continue; if((*(word + strlen(word) - 1) == *(base + (i * 100))) && *(check + i)) { *(check + i) = 0; siritori(base + i * 100, base, check, i, n); if(cnt > cntmax) { cntmax = cnt; } if(cntmax > maxmax) { maxmax = cntmax; for(j = 0; j < cntmax; j++) //最も長続きする場合の語順をコピー { words[j] = temp[j]; } } cnt = 0; *(check + i) = 1; } } } int main(void) { int i = 0, n = 0; char check[1000], buf[100][1000]; FILE *in; if((in = fopen("wordlist.txt", "r")) == NULL) { puts("wordlist.txtが読み込めませんでした"); exit(1); } while(!feof(in)) { fscanf(in, "%s", &word[i++]); n++; } fclose(in); for(i = 0; i < n; i++) { check[i] = 1; } printf("n = %d\n", n); for(i = 0; i < n; i++) { puts(word[i]); } for(i = 0; i < n; i++) { check[i] = 0; siritori(word[i], word[0], check, i, n); check[i] = 1; } printf("最大の長さ:%d\n", cntmax); for(i = 0; i < cntmax; i++) { printf("%s\n", word[words[i]]); } return 0; }