fork(4) download
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. int t_c,k;
  7. char b[10000],a[25][25];
  8. int xx[]={0,0,-1,-1,-1,1,1,1};
  9. int yy[]={1,-1,0,1,-1,0,1,-1};
  10. struct TT
  11. {
  12. char ck[1000];
  13. }ch[1000];
  14.  
  15. int comp(TT a,TT b)
  16. {
  17. if(strlen(a.ck)<strlen(b.ck))
  18. return 1;
  19. else if(strlen(a.ck)>strlen(b.ck))
  20. return 0;
  21. else
  22. return strcmp(a.ck,b.ck)<0;
  23. }
  24.  
  25. int is_safe(int c,int d)
  26. {
  27. if(c<0||c>=t_c||d<0||d>=t_c)
  28. return 0;
  29. else return 1;
  30. }
  31. int backtrack(int x,int y,int l)
  32. {
  33. int c,d,i,f1;
  34. if(l>=3)
  35. {
  36. f1=0;
  37. for(i=0;i<k;i++)
  38. if(!strcmp(ch[i].ck,b))
  39. f1=1;
  40. if(!f1)
  41. {
  42. strcpy(ch[k].ck,b);
  43. //printf("%s\n",ch[k].ck);
  44. k++;
  45. }
  46. }
  47. for(i=0;i<8;i++)
  48. {
  49. c=x+xx[i];
  50. d=y+yy[i];
  51. if(is_safe(c,d)&&a[c][d]>a[x][y])
  52. {
  53. b[l]=a[c][d];
  54.  
  55. backtrack(c,d,l+1);
  56. }
  57. }
  58. b[l-1]='\0';
  59. return 0;
  60. }
  61.  
  62.  
  63. int main()
  64. {
  65. int t,i,j,f=0;
  66. //freopen("output.txt","w",stdout);
  67. scanf("%d",&t);
  68. while(t--)
  69. {
  70. if(f)
  71. printf("\n");
  72. f=1;
  73. k=0;
  74. scanf("%d",&t_c);
  75. getchar();
  76. for(i=0;i<t_c;i++)
  77. scanf("%s",&a[i]);
  78. for(i=0;i<t_c;i++)
  79. for(j=0;j<t_c;j++)
  80. {
  81. b[0]=a[i][j];
  82.  
  83. backtrack(i,j,1);
  84. }
  85. sort(ch,ch+k,comp);
  86. for(i=0;i<k;i++)
  87. printf("%s\n",ch[i].ck);
  88. }
  89. return 0;
  90. }
  91.  
Success #stdin #stdout 0.02s 3716KB
stdin
2

3
one
top
dog

4
abcd
bcda
cdab
dabc
stdout
dop
dot
eno
enp
ent
eop
eot
gop
got
nop
not
enop
enot

abc
abd
acd
bcd
abcd